2014-05-01 93 views
-1
$('#dropdown').on('click', function(){ 
    $(document).on('click', function(){ 
     console.log('Document event bound and fired'); 
    }); 
}) 

Jsfiddle爲什麼jQuery on click事件在其回調中綁定了單擊事件?

如果瀏覽器監視mousedown元素和mouseup火災,爲什麼在地球上的事件勢必document火,它已經綁定之前,瀏覽器已經開始監視它mousedown之前在上面?是什麼讓它變得更加怪異,如果你在1ms的時間內將文檔封裝在點擊綁定中,它完全否定了這種邏輯謬誤。有人能向我解釋這裏發生了什麼事嗎?

+7

***從不*** ***綁定其他事件處理程序中的事件處理程序,當然不綁定到文檔的事件處理程序。這個問題幾乎沒有意義,因爲整個概念是有缺陷的。 – adeneo

+1

只是爲了回答這個問題,事件冒泡達到文檔級別。 – adeneo

+1

這只是冒泡。點擊事件將通過所有父元素上升DOM,如果它們中的任何一個具有處理程序,則它將會觸發。這不是*邏輯上的謬誤。這是一個相關的謬誤。 – Archer

回答

3
  1. 將鼠標按鈕按下在元素上,然後擡起。產生「點擊」事件。
  2. 瀏覽器將「單擊」傳遞給jQuery,它調用您的外部處理程序。
  3. 您的處理程序爲文檔級別的「單擊」事件分配另一個處理程序,然後返回。
  4. 瀏覽器現在將事件觸發到元素的父級及其父級等,直到達到文檔級別。
  5. 「click」事件現在觸發您在文檔級建立的事件處理程序。

注意,在點擊您將鼠標觸發,文檔處理程序將被重複加入,那麼就會有控制檯消息。