为什么在 jQuery 中同时调用 if 和 else 条件?
Why are both if and else conditions getting called in jQuery?
我的问题是关于使用委派,.on();
我环顾四周,但无法在 Whosebug 上找到有关我的问题的可能解决方案的信息。
我的点击事件中的两个条件都被触发或根本没有被触发。我试过切换条件,还是要么开火,要么根本不开火,我不知道为什么。
当前提供的 jQuery 根本不会触发。如果我删除或注释掉 else 语句中的所有代码并添加 console.log('test') 作为测试,那么您会看到两者都被触发了。
有好心人帮我解决问题吗?不幸的是,我无法通过 jsfiddle 模拟环境,因为这是 VPN 后面的一个 drupal 站点,有很多依赖项。
jQuery如下:
// Depth 1 Menu Controls
$('nav #block-superfish-1').on('click', 'li.menuparent.sf-depth-1 div.mobilesubnavarrow', function(){
if(!$(this).hasClass('sf-expanded')){
// Global
$('li.menuparent.sf-depth-1').removeClass('sf-expanded');
$('li.menuparent.sf-depth-1 div.mobilesubnavarrow').removeClass('sf-expanded');
$('li.menuparent.sf-depth-1').find('ul').css({display: 'none'});
$(this).addClass('sf-expanded');
$(this).closest('li.menuparent.sf-depth-1').addClass('sf-expanded');
$(this).closest('li.menuparent.sf-depth-1').find('ul').slideDown();
return;
} else {
//$(this).removeClass('sf-expanded');
$(this).closest('li.menuparent.sf-depth-1').removeClass('sf-expanded');
$(this).closest('li.menuparent.sf-depth-1').find('ul').slideUp();
}
});
我还有另一个完全相同的 jQuery 用于 'Depth 2',唯一改变的是 class .sf-depth-2
,所以没有意义发布这里也是。
感谢您的宝贵时间。
我已经为您的代码创建了一个简化的 fiddle:
https://jsfiddle.net/f6f2j319/
上面的代码似乎按预期工作。
如果代码根本没有触发,我建议您检查是否指定了正确的 jQuery 选择器:
li.menuparent.sf-depth-1 div.mobilesubnavarrow
里面的nav #block-superfish-1
(还要检查标记的结构以确保 div 的正确顺序...将其与我的 Fiddle 进行比较)
if
和 else
语句不应同时触发...该函数可能会快速连续触发两次,但如果没有看到更多代码就很难说.
检查您的脚本是否在页面上包含两次(特别是如果它包含意大利面条代码)。
我还在 fiddle 中添加了一个 else
语句中未注释的注释:
https://jsfiddle.net/k14oumfe/
这似乎是您需要的行为。
如果情况并非如此,请告诉我。
我的问题是关于使用委派,.on();
我环顾四周,但无法在 Whosebug 上找到有关我的问题的可能解决方案的信息。
我的点击事件中的两个条件都被触发或根本没有被触发。我试过切换条件,还是要么开火,要么根本不开火,我不知道为什么。
当前提供的 jQuery 根本不会触发。如果我删除或注释掉 else 语句中的所有代码并添加 console.log('test') 作为测试,那么您会看到两者都被触发了。
有好心人帮我解决问题吗?不幸的是,我无法通过 jsfiddle 模拟环境,因为这是 VPN 后面的一个 drupal 站点,有很多依赖项。
jQuery如下:
// Depth 1 Menu Controls
$('nav #block-superfish-1').on('click', 'li.menuparent.sf-depth-1 div.mobilesubnavarrow', function(){
if(!$(this).hasClass('sf-expanded')){
// Global
$('li.menuparent.sf-depth-1').removeClass('sf-expanded');
$('li.menuparent.sf-depth-1 div.mobilesubnavarrow').removeClass('sf-expanded');
$('li.menuparent.sf-depth-1').find('ul').css({display: 'none'});
$(this).addClass('sf-expanded');
$(this).closest('li.menuparent.sf-depth-1').addClass('sf-expanded');
$(this).closest('li.menuparent.sf-depth-1').find('ul').slideDown();
return;
} else {
//$(this).removeClass('sf-expanded');
$(this).closest('li.menuparent.sf-depth-1').removeClass('sf-expanded');
$(this).closest('li.menuparent.sf-depth-1').find('ul').slideUp();
}
});
我还有另一个完全相同的 jQuery 用于 'Depth 2',唯一改变的是 class .sf-depth-2
,所以没有意义发布这里也是。
感谢您的宝贵时间。
我已经为您的代码创建了一个简化的 fiddle:
https://jsfiddle.net/f6f2j319/
上面的代码似乎按预期工作。 如果代码根本没有触发,我建议您检查是否指定了正确的 jQuery 选择器:
li.menuparent.sf-depth-1 div.mobilesubnavarrow
里面的nav #block-superfish-1
(还要检查标记的结构以确保 div 的正确顺序...将其与我的 Fiddle 进行比较)
if
和 else
语句不应同时触发...该函数可能会快速连续触发两次,但如果没有看到更多代码就很难说.
检查您的脚本是否在页面上包含两次(特别是如果它包含意大利面条代码)。
我还在 fiddle 中添加了一个 else
语句中未注释的注释:
https://jsfiddle.net/k14oumfe/
这似乎是您需要的行为。
如果情况并非如此,请告诉我。