为什么点击事件上的jQuery会引发其回调中绑定的点击事件?

时间:2014-05-01 16:52:31

标签: javascript jquery

$('#dropdown').on('click', function(){
    $(document).on('click', function(){
        console.log('Document event bound and fired');
    });
})

Jsfiddle

如果浏览器监视元素上的mousedown并触发mouseup,那么为什么绑定到document的事件会在绑定之前和浏览器之前触发开始监视它mousedown了吗?更令人讨厌的是,如果你在1 ms setTimeout中将文档包装在点击装订上,它就完全否定了这种逻辑谬误。有人可以向我解释这里发生了什么吗?

1 个答案:

答案 0 :(得分:3)

  1. 按下元素上方的鼠标按钮,然后向上提起。 A"点击"事件已生成。
  2. 浏览器发送"点击"到jQuery,它调用你的外部处理程序。
  3. 您的处理程序为"点击"分配另一个处理程序文档级别的事件,并返回。
  4. 浏览器现在将事件发送到元素的父级及其父级等,直到达到文档级别。
  5. "点击" event现在触发您在文档级别建立的事件处理程序。
  6. 请注意,在 second 上单击您使用鼠标触发,您的文档处理程序将通过重复加入,因此两个控制台消息。