2013-02-01 92 views
0

我使用下面的代碼來顯示/隱藏導航及其子項。它按預期工作。當nav顯示時,我點擊其中一個子鏈接,它會關閉,然後將我帶到新頁面。如何在單擊鏈接時停止切換腳本結束?

// swap classes for lower level nav 
    jQuery('.toggle').click(function() { 
    $(this).toggleClass('toggle'); 
    $(this).toggleClass('toggle_open'); 
}); 

jQuery('a.portfolio').click(function(e) { 
    e.preventDefault(); 
}); 

它不使用Safari做到這一點,而Chrome &火狐上面顯示的行爲。當我看到檢查員打開時發生的事情;我點擊父鏈接,切換類被應用,我點擊一個子鏈接,切換類被交換回來。

如何阻止導航欄在關閉之前將導航欄導入請求的頁面?

我的標記(非傳統的導航 - 我知道):

<span class="toggle"> 
<a href="portfolio/" class="level1 portfolio">Portfolio</a> 
    <span> 
    <a href="portfolio/item1/" class="first level2">item 1</a> 
    <a href="portfolio/item2/" class="level2">item 2</a> 
    <a href="portfolio/item3/" class="last level2">item 3</a> 
    </span> 
</span> 

回答

1

您應該將e.stopPropagation()添加到所有<a>的點擊處理程序,並刪除e. preventDefault()這將阻止您進入新頁面。

試試這個代碼:

jQuery('.toggle').click(function() { 
    $(this).toggleClass('toggle'); 
    $(this).toggleClass('toggle_open'); 
}); 

jQuery('.toggle a.level2').click(function(e) { 
    e.stopPropagation(); 
}); 
+0

如果我這樣做,我不會能夠點擊子鏈接。我只是不希望我的切換腳本在我點擊另一個鏈接時結束。 – saintmalo

+0

@saintmalo我更新它,請檢查。 – pktangyue

+0

感謝兄弟 - 這個技巧很好:) – saintmalo

0

嘗試e.stopPropagation()防止調用額外的事件處理程序。您可能需要更改事件處理程序的順序。

+0

我添加了一個'e.stopPropagation()'爲.toggle_open,但它仍然切換到.toggle當我小時候點擊鏈接。 – saintmalo

+0

Infact添加'e.stopPropagation()'阻止我能夠點擊子鏈接。一旦我的切換腳本運行,我不希望它結束​​,如果另一個鏈接被點擊 – saintmalo