我正在尝试使用jquery的unbind函数从window对象中删除blur
和focus
个事件侦听器:
function removeWindowEvents(){
$(window).unbind('blur') ;
$(window).unbind('focus') ;
}
我使用Javascript注册了活动:
function addEvents(){
window.addEventListener('blur', function(){ document.title = "Blurred" ; });
window.addEventListener('focus', function(){ document.title = "In Focus" ;});
}
然而,这不起作用。我究竟做错了什么?我测试的是Mozilaa和Chrome(最新版本)
答案 0 :(得分:7)
你不能按照自己的方式去做。
如果使用jQuery配置了原始侦听器,jQuery只能取消绑定给定事件的所有事件处理程序。
这是因为必须使用addEventListener()
删除添加了removeEventListener()
的事件,removeEventListener()
需要第二个参数来指定回调函数。
来自MDN page:
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');
}
答案 1 :(得分:0)
尝试使用jquery进行绑定 见Using JQuery to bind "focus" and "blur" functions for "window", doesn't work in IE
$(function() {
$(window).focus(function() {
console.log('Focus');
});
$(window).blur(function() {
console.log('Blur');
});
});