2011-03-14 74 views

回答

138

是的,他們是不同的。

return false與調用event.stopPropagation()event.preventDefault()基本相同。

鑑於event.stopImmediatePropagation()相同event.stopPropagation()防止相同元件上的其他註冊事件處理程序被執行。因此它不會阻止某個事件的默認操作,例如點擊鏈接。

簡而言之:

      stop | prevent  | prevent "same element" 
          bubbling | default action | event handlers 

return false     Yes   Yes    No 
preventDefault    No   Yes    No 
stopPropagation    Yes   No    No 
stopImmediatePropagation  Yes   No    Yes 

return false還工作在 「正常」 的JavaScript事件處理程序

event.stopPropagation()event.preventDefault()在 「正常」 的JavaScript事件處理程序也工作(在W3C兼容的瀏覽器),而event.stopImmediatePropagation()是jQuery的擴展(更新:顯然它是DOM Level 3 Events specification的一部分)。

注:return false防止事件在冒泡「正常」(非jQuery的)事件處理(見this answer)(但仍阻止默認動作)。


也許值得一讀:

+0

+1,我可以說stopPropagation意味着停止冒泡 - 是的,防止默認 - 不,防止相同的元素處理器 - 沒有 – Arjun 2011-03-14 19:06:32

+0

@Arjun:是的....讓我補充這一點。 – 2011-03-14 19:10:56

+0

+1用於提供此優秀對比表 – 2014-04-16 07:22:27

0

是。 event.stopImmediatePropagation()不會讓任何其他處理程序被調用,無論它們在哪裏綁定。返回false僅阻止綁定到其他元素的處理程序(即,與處理stopImmediatePropagation()調用的事件處理程序不同的元素)接收事件。

4

返回false將停止事件冒泡,但其他界事件將觸發。但stopImmediatePropagation可防止其他綁定事件觸發並停止冒泡。

代碼本上jsfiddle實施例。

0

@FelixKling答案是有表偉大構想:

我張貼更多的解釋表:

      stop | prevent  |  prevent   | 
          bubbling | default action | event handlers  | 
                Same Element | Parent Element 

return false     Yes   Yes    No   No 
preventDefault    No   Yes    No   No 
stopPropagation    Yes   No    No   Yes 
stopImmediatePropagation  Yes   No    Yes   No 

參考:https://stackoverflow.com/a/5302939/2236219

1

這裏是return false完整的演示, preventDefaultstopPropagationstopImmediatePropagation

var kid = document.getElementsByTagName('button')[0]; 
 
var dad = document.getElementsByTagName('div')[0]; 
 

 
kid.addEventListener('click', function(e) { 
 
    console.log('kid here'); 
 
    e.stopImmediatePropagation(); 
 
}); 
 

 
kid.addEventListener('click', function(e) { 
 
    console.log('neighbour kid here'); 
 
}); 
 

 
dad.addEventListener('click', function(e) { 
 
    console.log('dad here'); 
 
}); 
 

 
dad.addEventListener('click', function(e) { 
 
    console.log('neighbour dad here'); 
 
});
<div> 
 
    <button>press</button> 
 
</div>

(也可在JSFiddle

manwal’s answer表是不完全正確。

      stop | prevent  |  prevent 
          bubbling | default action | event handlers 
            |    | Same Element | Parent Element 

return false     Yes   Yes    No   No 
preventDefault    No   Yes    No   No 
stopPropagation    Yes   No    No   Yes 
stopImmediatePropagation  Yes   No    Yes   **Yes**