JQuery 在 wordpress 上运行不一致
JQuery on wordpress not working consistently
在我的 WP 网站中,我有一个 div 和当前菜单项 .side-nav-left
以及下面的另一个和其他菜单项 #sidebar-fixed
。
然后屏幕转到755以下,下面的div消失,.side-nav-left
变成一个按钮来切换下面的div。
我已经把它放在主题选项的head前面了。
<script>
jQuery(document).ready(function($) {
$(window).on("resize", function (e) {
checkScreenSize();
});
checkScreenSize();
function checkScreenSize(){
var newWindowWidth = $(window).width();
if (newWindowWidth < 755) {
$('#sidebar-fixed').hide();
$('.side-nav-left').on('click', function(){
$('#sidebar-fixed').toggle();
})
}
else
{
$('#sidebar-fixed').show();
$('.side-nav-left').off();
}
}
});
</script>
Div #sidebar-fixed
始终在屏幕调整大小时正确显示或隐藏。
问题出在按钮 .side-nav-left
上,它有时能用,有时不能用。例如,我在页面中有一个来自插件的手风琴。如果我将屏幕尺寸调整到 755 以下,该按钮将不起作用。如果我打开手风琴并再次尝试我的切换然后它工作。然后,如果我再次单击手风琴,它就会停止工作。
或者有时我将屏幕大小调整到 755 以下并且它可以工作,然后再次调整到 755 以上和以下再次调整大小并且它停止工作。
我试图了解它不起作用的原因。是不是因为jQuery没有加载?是否与站点上的其他 jQuery 冲突?或者它可能是什么?
看起来每个 resize
屏幕尺寸低于 755 像素的事件都附加了一个事件侦听器,因此在某些情况下元素上可能存在多个。如果这个数字恰好是偶数,toggle
功能将使它恢复到原来的状态。
最直接的方法是在附加之前删除任何已经存在的侦听器:
$('.side-nav-left').off().on('click', function() {
$('#sidebar-fixed').toggle();
});
您还可以添加一个稍微更有效的标志,尽管实际上这可能只对调整浏览器大小的开发人员有影响:
jQuery(function($) {
var listen;
$(window).resize(checkScreenSize);
checkScreenSize();
function checkScreenSize() {
var newWindowWidth = $(window).width();
if (newWindowWidth < 755) {
if (!listen) {
listen = true;
$('#sidebar-fixed').hide();
$('.side-nav-left').off().on('click', function() {
$('#sidebar-fixed').toggle();
});
}
}
else {
$('#sidebar-fixed').show();
$('.side-nav-left').off();
listen = false;
}
}
});
在我的 WP 网站中,我有一个 div 和当前菜单项 .side-nav-left
以及下面的另一个和其他菜单项 #sidebar-fixed
。
然后屏幕转到755以下,下面的div消失,.side-nav-left
变成一个按钮来切换下面的div。
我已经把它放在主题选项的head前面了。
<script>
jQuery(document).ready(function($) {
$(window).on("resize", function (e) {
checkScreenSize();
});
checkScreenSize();
function checkScreenSize(){
var newWindowWidth = $(window).width();
if (newWindowWidth < 755) {
$('#sidebar-fixed').hide();
$('.side-nav-left').on('click', function(){
$('#sidebar-fixed').toggle();
})
}
else
{
$('#sidebar-fixed').show();
$('.side-nav-left').off();
}
}
});
</script>
Div #sidebar-fixed
始终在屏幕调整大小时正确显示或隐藏。
问题出在按钮 .side-nav-left
上,它有时能用,有时不能用。例如,我在页面中有一个来自插件的手风琴。如果我将屏幕尺寸调整到 755 以下,该按钮将不起作用。如果我打开手风琴并再次尝试我的切换然后它工作。然后,如果我再次单击手风琴,它就会停止工作。
或者有时我将屏幕大小调整到 755 以下并且它可以工作,然后再次调整到 755 以上和以下再次调整大小并且它停止工作。
我试图了解它不起作用的原因。是不是因为jQuery没有加载?是否与站点上的其他 jQuery 冲突?或者它可能是什么?
看起来每个 resize
屏幕尺寸低于 755 像素的事件都附加了一个事件侦听器,因此在某些情况下元素上可能存在多个。如果这个数字恰好是偶数,toggle
功能将使它恢复到原来的状态。
最直接的方法是在附加之前删除任何已经存在的侦听器:
$('.side-nav-left').off().on('click', function() {
$('#sidebar-fixed').toggle();
});
您还可以添加一个稍微更有效的标志,尽管实际上这可能只对调整浏览器大小的开发人员有影响:
jQuery(function($) {
var listen;
$(window).resize(checkScreenSize);
checkScreenSize();
function checkScreenSize() {
var newWindowWidth = $(window).width();
if (newWindowWidth < 755) {
if (!listen) {
listen = true;
$('#sidebar-fixed').hide();
$('.side-nav-left').off().on('click', function() {
$('#sidebar-fixed').toggle();
});
}
}
else {
$('#sidebar-fixed').show();
$('.side-nav-left').off();
listen = false;
}
}
});