为什么在jQuery中同时调用if和else条件?

Why are both if and else conditions getting called in jQuery?

本文关键字:if else 条件 调用 jQuery 为什么      更新时间:2023-09-26

我的问题是关于使用委托,.on();

我已经环顾四周,无法找到信息在这里stackoverflow可能解决我的问题。

我的click事件中的两个条件都被触发或根本不被触发。我试过切换条件,仍然要么开火要么根本不开火,我不知道为什么。

当前提供的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',唯一改变的是类.sf-depth-2,所以没有在这里张贴的意义。

感谢您的宝贵时间。

我已经创建了一个简化的代码:

https://jsfiddle.net/f6f2j319/

上面的代码看起来像预期的那样工作。如果代码根本没有触发,我建议您检查是否指定了正确的jQuery选择器:

li.menuparent.sf-depth-1 div.mobilesubnavarrownav #block-superfish-1

(也检查你的标记结构,以确保div的正确顺序…比较它与我的小提琴)

ifelse语句不应该同时发射…函数有可能连续触发两次,但如果没有看到更多的代码,很难说。

检查您的脚本没有在页面中包含两次(特别是如果它包含意大利面条代码)。

我还在else语句中添加了注释:https://jsfiddle.net/k14oumfe/

这似乎是你需要的行为。

如果不是这样,请告诉我。