javascript - wordpress 自定义主题 - getelementbyid 访问 header.php 中的元素返回 null
问题描述
我是 Wordpress 开发的新手。我正在尝试添加一个汉堡菜单下拉菜单,但是由于某种原因,尝试通过 getElementbyID 调用要单击的图标会返回 null。js 文件中的其他代码正在注册,所以我相信我的编码正确。我不确定 DOM 树的某些方面或我缺少的 wordpress 主题的编码。任何帮助是极大的赞赏。
在 header.php 中
<div id="nav_icon_burger_x">
<span></span>
<span></span>
<span></span>
<span></span>
</div>
在 app.js 中
const mobileNavIcon = document.getElementById('nav_icon_burger_x');
mobileNavIcon.addEventListener('click', function () {
mobileNavIcon.toggleClass('open');
});
在functions.php中
function include_js_files() {
wp_enqueue_script('idm250-js', get_template_directory_uri() . '/dist/scripts/app.js');
}
// When WP performs this action, call our function
add_action('wp_enqueue_scripts', 'include_js_files');
解决方案
首先拯救我的是向菜单按钮添加一个简单的 onclick 属性。像这样:
<div onclick="toggleFunction(event)">
<span></span>
<span></span>
<span></span>
<span></span>
</div>
然后你把你的功能放在任何地方:
function toggleFunction(e){
e.target.classList.toggle('open');
}
您的代码也存在问题,toggleClass 来自 jQuery,因此您需要一个 Jquery 元素来切换其类,您可以在 vanilla 上使用 classList.toggle('yourClass')
如果您需要为此使用 jQuery,请使用如下函数:
$('#nav_icon_burger_x').toggleClass('open')
在您的 addEventListener 函数中
您可以更进一步,从 jQuery 中进行点击事件,如下所示:
$('#nav_icon_burger_x').click( function() {
$(this).toggleClass('open');
});
function toggleFunction(e){
e.target.classList.toggle('open');
}
div{
position:relative;
display:flex;
flex-direction:column;
align-items:center;
width:30px;
height:36px;
cursor:pointer;
}
span{
background-color:black;
height:10px;
width:30px;
margin-bottom:2px;
}
.open{
background-color:blue;
}
<div onclick="toggleFunction(event)">
<span></span>
<span></span>
<span></span>
</div>
希望这可以帮助您实现目标。
推荐阅读
- sql - 在 SQL 中如何使用更新表命令使用 if 语句
- java - 如何在spring kafka Listener中找出是否是重试消息
- java - 是否可以计算数据成员不同的构造函数?
- java - Could not create query for public abstract org.springframework.data.domain.Page com.example.repository.DocumentsRepository.findBytypeid
- google-cloud-functions - 以编程方式从 pub sub 触发的云函数创建额外的云任务队列
- java - 在 AppWidgetProvider 中获取 GPS 经纬度
- mysql - 限制用户操作系统访问 MySQL 数据库
- pyspark - 如何从 pyspark 中的模式 json 文件创建 DataFrame 模式?
- python - 我尝试使用 python openpyxl 在 excel 中创建多个工作表以在循环中存储不同的值,但它只创建一个工作表
- java - 表达式的非法开始:Java 方法