Javascript 使用jquery从窗口对象中删除事件侦听器

Javascript 使用jquery从窗口对象中删除事件侦听器,javascript,jquery,browser,Javascript,Jquery,Browser,我正在尝试使用jquery的unbind函数从窗口对象中删除blur和focus事件侦听器,方法是: function removeWindowEvents(){ $(window).unbind('blur') ; $(window).unbind('focus') ; } 我使用Javascript注册了事件: function addEvents(){ window.addEventListener('blur', function(){ document.title

我正在尝试使用jquery的unbind函数从窗口对象中删除
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" ;}); 


}

然而,这是行不通的。我做错了什么?我测试了这是Mozila和Chrome(最新版本)

你不能按自己的方式来做

如果原始侦听器是使用jQuery配置的,那么jQuery只能取消绑定给定事件的所有事件处理程序

这是因为使用
addEventListener()
添加的事件必须使用
removeEventListener()
删除,并且
removeEventListener()
需要第二个指定回调函数的参数

从:

如果事件最初是使用jQuery注册的,那么jQuery将通过只向addEventListener注册一个主事件(指向它自己的回调函数),然后使用它自己的事件分派到通过jQuery注册的所有事件来解决这个问题。这允许它像您尝试使用的那样支持generic
.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);
}
function addEvents(){
    $(window).on('blur', function(){ document.title = "Blurred" ; })
             .on('focus', function(){ document.title = "In Focus" ;}); 
}

function removeWindowEvents() {
    $(window).off('blur focus');
}
使用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);
}
function addEvents(){
    $(window).on('blur', function(){ document.title = "Blurred" ; })
             .on('focus', function(){ document.title = "In Focus" ;}); 
}

function removeWindowEvents() {
    $(window).off('blur focus');
}
尝试使用jquery绑定 看


您使用的浏览器是什么?您应该显示如何注册事件侦听器。添加该代码。我在Firefox和chrome上进行了测试。您也尝试过使用
off
吗?如果您将事件绑定到.on(),那么您可以使用.off()将它们解除绑定。使用jQuery将两者都绑定,而不是使用native进行绑定,然后使用jQuery取消绑定回调函数必须与您在事件侦听器添加中添加的回调函数相同。例如,如果添加事件侦听器myCallBack,则在删除事件侦听器myCallBack时,应删除该函数