我正在尝试找到与此 JavaScript 方法调用等效的 jQuery:
document.addEventListener('click', select_element, true);
我已经做到了:
$(document).click(select_element);
但这并没有达到相同的结果,作为 JavaScript 方法的最后一个参数 - 一个布尔值,指示事件处理程序是否应该在捕获阶段或冒泡阶段执行(根据我对 http://www.quirksmode 的理解) .org/js/events_advanced.html) - 被排除在外。
如何使用 jQuery 指定该参数或以其他方式实现相同的功能?
从 jQuery 1.7 开始,
.on()
现在是绑定事件的首选方法,而不是 .bind()
:
来自http://api.jquery.com/bind/:
从 jQuery 1.7 开始,.on() 方法是 将事件处理程序附加到文档。对于早期版本, .bind() 方法用于将事件处理程序直接附加到 元素。处理程序附加到当前选定的元素 jQuery 对象,因此这些元素必须存在于调用点 发生 .bind() 。对于更灵活的事件绑定,请参阅讨论 .on() 或 .delegate() 中的事件委托。
文档页面位于 http://api.jquery.com/on/
最接近的是绑定函数:
$('#foo').bind('click', function() {
alert('User clicked on "foo."');
});
需要注意的一件事是,jQuery 事件方法不会在包含 SVG DOM 的
load
标签上触发/捕获 embed
,该 SVG DOM 在 embed
标签中作为单独的文档加载。我发现捕获 load
事件的唯一方法是使用原始 JavaScript。
这行不通(我已经尝试过
on
/bind
/load
方法):
$img.on('load', function () {
console.log('FOO!');
});
但是,这有效:
$img[0].addEventListener('load', function () {
console.log('FOO!');
}, false);
您现在应该使用
.on()
函数来绑定事件。
$( "button" ).on( "click", function(event) {
alert( $( this ).html() );
console.log( event.target );
} );
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<button>test 1</button>
<button>test 2</button>
这里是 Mozilla 开发网络 (MDN) 上针对标准 JavaScript 的此问题的出色处理(如果您不想依赖 jQuery 或总体上更好地理解它):
https://developer.mozilla.org/en-US/docs/DOM/element.addEventListener
这里是对上述处理中的一个链接的事件流的讨论:
http://www.w3.org/TR/DOM-Level-3-Events/#event-flow
一些要点是:
$("#filter_btn").off("click").on("click", function () {
// code here...
})