jQuery相当于JavaScript';s-addEventListener方法

jQuery相当于JavaScript';s-addEventListener方法,javascript,jquery,events,event-handling,dom-events,Javascript,Jquery,Events,Event Handling,Dom Events,我试图找到与此JavaScript方法调用等效的jQuery: document.addEventListener('click', select_element, true); 我已经做到了: $(document).click(select_element); 但这并没有得到相同的结果,因为JavaScript方法的最后一个参数被忽略了,这是一个布尔值,指示事件处理程序应该在捕获阶段还是冒泡阶段执行(根据我的理解) 如何使用jQuery指定该参数或以其他方式实现相同的功能?最接近的是绑定

我试图找到与此JavaScript方法调用等效的jQuery:

document.addEventListener('click', select_element, true);
我已经做到了:

$(document).click(select_element);
但这并没有得到相同的结果,因为JavaScript方法的最后一个参数被忽略了,这是一个布尔值,指示事件处理程序应该在捕获阶段还是冒泡阶段执行(根据我的理解)


如何使用jQuery指定该参数或以其他方式实现相同的功能?

最接近的是绑定函数:


并非所有浏览器都支持事件捕获(例如,小于9的Internet Explorer版本不支持),但所有浏览器都支持事件冒泡,这就是为什么它是用于将处理程序绑定到所有跨浏览器抽象(包括jQuery)中的事件的阶段


最接近您在jQuery中查找的方法是使用(在jQuery 1.7+中被替代)或特定于事件的jQuery方法(在本例中,它在内部调用
bind()
)。所有这些都使用引发事件的冒泡阶段。

从jQuery 1.7开始,
.on()
现在是绑定事件的首选方法,而不是
.bind()

发件人:

从jQuery1.7开始,.on()方法是 将事件处理程序附加到文档。对于早期版本 .bind()方法用于将事件处理程序直接附加到 元素。处理程序将附加到中当前选定的元素 jQuery对象,因此这些元素必须存在于调用点 to.bind()发生。有关更灵活的事件绑定,请参阅讨论 在.on()或.delegate()中的事件委派

文档页面位于

您现在应该使用
.on()
函数来绑定事件。

这是Mozilla开发网络(MDN)对标准JavaScript的一个极好的处理方法(如果您不希望依赖jQuery或更全面地理解它):

以下是对上述处理中一个链接的事件流的讨论:

一些要点是:

  • 它允许为一个事件添加多个处理程序
  • 当监听器被激活时,它为您提供了更细粒度的阶段控制(捕获与冒泡)
  • 它适用于任何DOM元素,而不仅仅是HTML元素
  • 传递给事件的“this”值不是全局对象(窗口),而是从中激发元素的元素。这很方便
  • 遗留IE浏览器的代码很简单,包含在标题“遗留Internet Explorer和attachEvent”下
  • 如果将处理程序包含在匿名函数中,则可以包含参数

需要注意的一点是,jQuery事件方法不会在
embed
标记上触发/捕获
load
,这些标记包含SVG DOM,SVG DOM作为单独的文档加载在
embed
标记中。我发现在这些上捕获
load
事件的唯一方法是使用原始JavaScript

这不起作用(我尝试了
上的
/
绑定
/
加载
方法):

然而,这是可行的:

$img[0].addEventListener('load', function () {
    console.log('FOO!');
}, false);
$(“按钮”)。在(“单击”)上,函数(事件){
警报($(this.html());
console.log(event.target);
} );

测试1

测试2
jQuery不支持事件捕获,因为jQuery支持的IE不支持事件捕获;)你在寻找IE兼容性吗?谢谢,新月新鲜-我认为这是有意义的。我确实需要IE兼容性,所以我想我需要忘记捕获阶段。看起来IE9终于支持它了。为什么他们不支持事件捕获?事件捕获的缺点是什么?需要明确的是,您的意思是OP想要的是不可能的——您必须使用冒泡,而不能使用捕获。对吗?应该注意,如果您不想覆盖元素的任何其他绑定事件处理程序,这是正确的方法。什么是
$img
?已编辑接受的答案以解决此问题。
$img.on('load', function () {
    console.log('FOO!');
});
$img[0].addEventListener('load', function () {
    console.log('FOO!');
}, false);