使用jquery从window对象中删除事件侦听器

时间:2013-09-22 19:01:06

标签: javascript jquery browser

我正在尝试使用jquery的unbind函数从window对象中删除blurfocus个事件侦听器:

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(最新版本)

2 个答案:

答案 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');
    });
});