jQuery相当于JavaScript的addEventListener方法

Bun*_*gle 181 javascript jquery events event-handling javascript-events

我试图找到这个JavaScript方法调用的jQuery等价物:

document.addEventListener('click', select_element, true);
Run Code Online (Sandbox Code Playgroud)

我已经达到了:

$(document).click(select_element);
Run Code Online (Sandbox Code Playgroud)

但这并没有达到与JavaScript方法的最后一个参数相同的结果 - 一个布尔值,指示事件处理程序是否应该在捕获或冒泡阶段执行(根据我的理解来自http://www.quirksmode.org) /js/events_advanced.html) - 被遗漏了.

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

Rus*_*Cam 137

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

最接近你在jQuery中寻找的是使用bind()(on()在jQuery 1.7+中取代)或特定于事件的jQuery方法(在这种情况下,无论如何都在内部click()调用bind()).所有都使用凸起事件的冒泡阶段.

  • 看起来IE9最终支持它.http://blogs.msdn.com/b/ie/archive/2010/03/26/dom-level-3-events-support-in-ie9.aspx (6认同)
  • 为了清楚起见,你说的是OP想要的东西是不可能的 - 你必须使用冒泡,而不能使用捕获.对? (2认同)

小智 112

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

来自http://api.jquery.com/bind/:

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

文档页面位于 http://api.jquery.com/on/


Ben*_*owe 51

最接近的是绑定功能:

http://api.jquery.com/bind/

$('#foo').bind('click', function() {
  alert('User clicked on "foo."');
});
Run Code Online (Sandbox Code Playgroud)


tbj*_*ers 14

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

这不起作用(我尝试过on/ bind/ load方法):

$img.on('load', function () {
    console.log('FOO!');
});
Run Code Online (Sandbox Code Playgroud)

但是,这有效:

$img[0].addEventListener('load', function () {
    console.log('FOO!');
}, false);
Run Code Online (Sandbox Code Playgroud)


小智 12

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


ant*_*ove 9

$( "button" ).on( "click", function(event) {

    alert( $( this ).html() );
    console.log( event.target );

} );
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

<button>test 1</button>
<button>test 2</button>
Run Code Online (Sandbox Code Playgroud)