2013-05-18 91 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

太棒了,工作!謝謝。 –