0

說我聽點擊一個按鈕正在偵聽特定元素上的事件,導致該事件在不相關的元素上觸發?

btn.addEventListener("click", function(e) { 
    console.log("button clicked"); 
}); 

現在,這激活了點擊監聽器,如果在我的用戶點擊按鈕,單擊事件將觸發對我的按鈕,然後傳播到其所有的父母(除冒泡被阻止)。但是如果用戶點擊完全不相關的元素呢?這是否會導致事件觸發該元素,然後傳播給其所有父母? (即使沒有興趣處理這些點擊事件)

我的猜測是,是的,它會的,因爲一旦我開始在特定元素上偵聽它們,應該在整個窗口上有點擊偵聽器。但我不確定。

+0

事件應該會觸發,但除非您編碼,否則將不予處理。 – AndFisher

+0

您的處理程序*是否在與其他元素髮生交互時引發事件觸發?我想這不會。事件系統應該運行,而不管已添加的處理程序。如果它沒有啓動,直到有人在某處添加處理程序,我會感到驚訝。但我想我不確定。 – 2016-12-16 16:25:25

+0

@squint,那麼即使沒有任何處理程序,所有事件都會被監聽嗎?考慮到可能發生的事件,這對處理器時間來說是一個巨大的浪費。你確定嗎? – user7307621

回答

0

從JavaScript要點由O'Reilly:

當一個事件發生時,瀏覽器會檢查您是否已經定義了該事件的 事件處理程序;如果你有,那個函數運行。一旦 該功能完成,瀏覽器再次開始事件循環。 只要加載網頁,此事件循環就會繼續。

這意味着,每個點擊方法都是由瀏覽器處理的。但是,如果您沒有分配監聽者,則不會再繼續。但至少,它知道什麼時候點擊。

+0

這意味着每次用戶鍵入一個鍵時,像keydown,keyup,keypress這樣的事件都會觸發並導致瀏覽器檢查每個事件是否有任何處理程序,即使沒有......什麼是浪費CPU時間... – user7307621

+0

雖然可能看起來如此,但JavaScript通常具有非阻塞I/O概念。我可以建議你一些關於它的文章[這裏](http://blog.carbonfive.com/2013/10/27/the-javascript-event-loop-explained/),[here](https:// developer。 mozilla.org/tr/docs/Web/JavaScript/EventLoop)和[這裏](http://altitudelabs.com/blog/what-is-the-javascript-event-loop/) –

相關問題