2014-01-11 42 views
1

我花了不止一小時的時間閱讀api.jquery.com,並且同時嘗試自己做。手風琴菜單 - e.preventDefault。如何保持標準動作<a href="">

而我仍然不知道如何以正確的方式解決問題。

我有這個手風琴腳本:

$(document).ready(function(){  
    $(".menu-list > li > a").on("click", function(e){  
     if($(this).parent().has("ul")) { 
      e.preventDefault(); 
     }  
     if(!$(this).hasClass("open")) { 
      $(".menu-list li ul").slideUp(350); 
      $(".menu-list li a").removeClass("open");   
      $(this).next("ul").slideDown(350); 
      $(this).addClass("open"); 
     }   
     else if($(this).hasClass("open")) {  
      $(this).removeClass("open"); 
      $(this).next("ul").slideUp(350); 
     } 
    }); 
}); 

和菜單看起來像這樣:

<ul class="menu-list"> 
    <li><a href="panel.php" class="panel">Panel</a></li> 
    <li><a href="doesn't matter" class="articles">Articles</a> 
     <ul> 
      <li><a href="somepage.php">Some page</a></li> 
      <li><a href="somepage2.php">Some page 2</a></li> 
      <li><a href="somepage3.php">Some page 3</a></li> 
     </ul> 
    </li> 
    <li>......... 

ofcourse becouse e.preventDefault的();點擊鏈接將不會將瀏覽器分配給頁面。 Clicked元素將展​​開<ul>,包含在<li>中。 這很好。

但無論如何,對於一些鏈接,我想保持的標準動作<a> (爲的exaple <li><a href="panel.php" class="panel">Panel</a></li>) 這樣他們就可以把我的頁面在href

的問題是如何做到這一點,同時保留手風琴對於其他元素的正確工作。

我到目前爲止最好的做法是刪除e.preventDefault();並將#插入到我想用作觸發器的鏈接中。但是,這是正確的方式?

(對不起形成我的英語,如果有任何錯誤)

回答

3

您可以添加自定義類,你要作爲一個「真實」的鏈接你的元素。

<a href="file1.php" class="real-link">Link1</a> 
<a href="file2.php" class="real-link">Link2</a> 

,這一行添加到您的單擊事件處理程序:

if($(this).hasClass('real-link')) return true; 
+0

感謝的人......。這真是有幫助。我不能投票,因爲我在15歲以下的聲望。這很容易omg ..但顯然我只是一個初學者 – RysQ

+0

沒有問題。祝你工作順利! – andreivictor