【问题标题】:How does jQuery listen for DOM events being fired?jQuery 如何监听被触发的 DOM 事件?
【发布时间】:2013-01-29 02:05:36
【问题描述】:

jQuery 如何知道任何 DOM 事件何时发生?

$('body').on('click', function(e) {
    alert('working');
});

document.body.onclick; // null

我太依赖这个库了。有人能告诉我它是如何知道身体被点击的吗?

【问题讨论】:

标签: jquery dom javascript-events event-handling


【解决方案1】:

.on 包装 jQuery.event.add(如果您查看第 2688 行的 jQuery 源代码)。

这会尝试使用事件类型的缓存版本,但如果没有,最终归结为调用特定于浏览器的函数来附加事件(大约在第 2767 行)。

if ( elem.addEventListener ) {
    elem.addEventListener( type, eventHandle, false );
} else if ( elem.attachEvent ) {
    elem.attachEvent( "on" + type, eventHandle );
}

这两种情况似乎都没有后备方案,因此永远不会写入on* 属性。因此,如果您使用jQuery.onelem.onclick 将为空

供参考:http://code.jquery.com/jquery.js

【讨论】:

  • 它如何知道它是否已经被缓存?缓存是指在同一元素上为同一事件类型连续多次绑定相同的处理函数?
  • @danronmoon 完全正确; jQuery 在内部将绑定事件作为元素数据的一部分进行管理
【解决方案2】:

jQuery(感谢上帝)不使用 DOM 元素的 onclick 属性或属性,而是使用 addEventlistener 或 IE-attachEvent

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多