2013-03-04 50 views
2

我有一個鏈接,看起來像這樣:如何防止默認鏈接的行爲,如果鏈接的內部元件的點擊

<a href="page.html" class="myLink"> 
    Link text 
    <div class="toggle">x</div> 
</a> 

當他們點擊x在撥動我想阻止導航鏈接,但如果他們點擊Link Text我想讓鏈接導航。

我嘗試這樣做:

$('.toggle').click(function(event) { $(this).parents('a').preventDefault(); });

但它似乎並沒有工作。

+1

http://api.jquery.com/event.preventDefault/會告訴你它是一個事件對象的方法,而不是jQuery對象。 – Blazemonger 2013-03-04 20:41:06

回答

6

要停止從點擊元素傳播到外部a,您必須致電stopPropagation。但在這裏,你可以簡單地返回false(兩者停止傳播,並防止默認行爲):

$('.toggle').click(function(event) { 
    // do interesting things 
    return false 
}); 
+0

**測試頁** - http://jsbin.com/sihix/1/edit – vsync 2014-09-08 11:44:04

+0

值得注意的是,即使有一個偵聽器停止傳播,但如果有'mouseup'事件的偵聽器,這似乎不起作用所有三個'mousedown'和'click'和'mouseup'事件。它對mousedown事件毫無問題。 – 2017-07-25 12:28:47

1

它是事件不是你需要火的preventDefault在()方法的元素。

$('.toggle').click(function (event) { 
    event.preventDefault(); 
}); 

這將停止觸發事件但不傳播文檔。

$('.toggle').click(function (event) { 
    event.stopPropagation(); 
}); 

是否與之相對應。