2012-05-09 90 views
0

如何停止要調用的父綁定?如何停止與Jquery的鏈接的傳播傳播

例子:

<div id="test"> 
    <a href="#" id="link" onclick="alert('testing')">TEST</a> 
</div> 
$('#test').on('click',function(){ 
    alert('I dont want it to fire it up!');   
}) 

我只是想火上#TEST在#LINK的onclick,而不是事件,如果我在#LINK點擊

感謝您的答覆

回答

2

使用stopPropagation

event.stopPropagation(); 
+0

內聯處理程序不使用jquery,因此這不起作用,即ie – Esailija

+0

stopPropagation在現代瀏覽器中是有效的javascript,無論jQuery如何。 –

+0

@JeremyLawson我說,即使不是現代瀏覽器,但 – Esailija

0

stopPropagation()可防止事件傳播。不過,您必須將事件傳遞給事件處理程序才能執行此操作。

$('#test').on('click',function(e){ 
    e.stopPropagation(); 
}) 
+0

+1 ohhh cool! :) ** ... ** – gdoron

+0

@gdoron:等等,什麼?我是否發現了一個諷刺的暗示? :) –

+0

我只是逗你... :)最好的答案。 'return false'應該只在需要時才使用。 – gdoron

1

在事件處理做一個return false將阻止傳播。不幸的是,它也會阻止鏈接的默認行爲;例如你的情況裝載<page url here>#

<a href="#" id="link" onclick="alert('testing'); return false;">TEST</a> 

編輯

jQuery.event對象包含一個有趣的屬性叫target其中,在冒泡事件的情況下,將包含接收到的實際點擊的元素。

$('#test').on('click', function(e) { 
    if ($(e.target).is("#link")) { 
     alert('#link was clicked; comment out this alert to ignore it'); 
    } 
    else { 
     alert('you clicked me but you did not click #link'); 
    } 
}); 

fiddle

順便說一句,我想知道是否有混合內聯和無礙事件處理程序的理由:如果它是有道理的,你可以使用它?

+0

停止濫用'return false;'http://fuelyourcoding.com/jquery-events-stop-misusing-return-false/ –

+1

您也預防了錯誤。 – gdoron

+0

@gdoron你有完全相同的答案......它也是一個鏈接href的'#',preventDefault其實在這裏需要 – Esailija

0

stopPropagation()是jQuery中的一個有效的javascript函數。 jQuery有助於支持IE,但您也可以使用cancelBubble來支持IE。

document.getElementById('link').onclick = function(e) { 
    if (e && e.stopPropagation) e.stopPropagation(); else window.event.cancelBubble = true; 
}