为什么我的jQuery preventDefault()工作不正常?

时间:2013-05-18 10:53:28

标签: php jquery wordpress

我正在开发一个Wordpress主题,它使用自制的jQuery手风琴进行导航:

// jQuery Footer Navigation Slide
jQuery('#footer-accordion > li > a').on('click', function(e){
    if(jQuery(this).parent().has('ul')) {
        e.preventDefault();
        if(!jQuery(this).hasClass('open')) {
            jQuery('#footer-accordion li ul').slideUp(350);
            jQuery('ul li a').removeClass('open');
            jQuery(this).next('ul').slideDown(350);
            jQuery(this).addClass('open');
        } else if(jQuery(this).hasClass('open')) {
            jQuery(this).removeClass('open');
            jQuery(this).next('ul').slideUp(350);
        }
    }
});

当我用裸HTML构建它时,这工作得很好,但我现在无法将它集成到我的Wordpress主题中。似乎我所在的e.preventDefault()也阻止了内部没有ul li a的菜单项(ul)的默认值(跟随链接)。我认为我的选择器很好,因为它在我的HTML中工作。

简而言之:如果我点击ul li a没有嵌套li的{​​{1}},我希望会定向到某个网页。但是,当我这样做时没有任何反应。 ul函数工作正常,我可以单击嵌套.slideUp()中的链接。我的选择者错了吗?我给ul函数提供了错误的变量吗?

这是wp_nav_menu()

的相关部分
footer.php

这就是Wordpress对此的看法:http://jsfiddle.net/vKmfu/

1 个答案:

答案 0 :(得分:1)

jQuery(this).parent().has('ul')部分是罪魁祸首。与大多数jQuery函数一样,此调用始终返回jQuery对象。在booelan上下文中使用JavaScript对象时,除非true,否则将其评估为null。您需要的是if(jQuery(this).parent().has('ul').length > 0) { ... }

顺便说一下,选择器'#footer-accordion > li > a'不会影响第二级或更多级别的链接。 >children选择器。您可能需要descendant选择器。