你不能按照你的方式去做。
如果原始侦听器是使用 jQuery 配置的,则 jQuery 只能取消绑定给定事件的所有事件处理程序。
这是因为添加的事件addEventListener()
必须删除,removeEventListener()
并且removeEventListener()
需要指定回调函数的第二个参数。
从MDN 页面:
target.removeEventListener(type, listener[, useCapture])
如果事件最初是使用 jQuery 注册的,那么 jQuery 会通过仅向 addEventListener 注册一个指向它自己的回调函数的主事件来解决这个问题,然后使用它自己的事件调度所有通过 jQuery 注册的事件。这允许它.unbind()
像您尝试使用的那样支持泛型,但它仅在原始事件使用 jQuery 注册并因此通过 jQuery 事件处理程序管理系统时才有效。
所以,如果没有 jQuery,你会这样做:
function blurHandler() {
document.title = "Blurred" ;
}
function focusHandler() {
document.title = "In Focus" ;
}
function addEvents(){
window.addEventListener('blur', blurHandler);
window.addEventListener('focus', focusHandler);
}
function removeWinowEvents() {
window.removeEventListener('blur', blurHandler);
window.removeEventListener('focus', focusHandler);
}
使用 jQuery,您可以这样做:
function addEvents(){
$(window).on('blur', function(){ document.title = "Blurred" ; })
.on('focus', function(){ document.title = "In Focus" ;});
}
function removeWindowEvents() {
$(window).off('blur focus');
}