2013-05-18 87 views
0

我正在开发其采用了自建jQuery的手风琴用于导航的WordPress的主题:为什么我的jQuery的preventDefault()工作不正确?

// 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没有嵌套ul,我希望定向到一个页面。但是,当我这样做的时候没有任何反应。 .slideUp()函数工作得很好,我可以单击嵌套的ul中的链接。我的选择器错了吗?我是否给wp_nav_menu()函数提供了错误的变量?

这是有关部分从footer.php

<?php wp_nav_menu(array(
     'container_class' => 'footer-navigation clearfix', 
     'menu_id'   => 'footer-accordion' 
)); ?> 

这是WordPress的做的什么:http://jsfiddle.net/vKmfu/

+0

为什么你不使用'wp_nav_menu'的自定义Walker类? – mate64

+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选择器。

+0

这不起作用,所有的链接都是可点击的(即使是嵌套的'ul'也是如此),并且没有任何链接可以添加该代码。 –

+1

哦,这是我的错误。 '长度'是属性而不是函数。纠正了错误。 –

+0

太棒了,工作!谢谢。 –