为什么在 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 进行比较)

ifelse 语句不应同时触发...该函数可能会快速连续触发两次,但如果没有看到更多代码就很难说.

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

我还在 fiddle 中添加了一个 else 语句中未注释的注释: https://jsfiddle.net/k14oumfe/

这似乎是您需要的行为。

如果情况并非如此,请告诉我。