Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery:not()选择器在.off()方法中不起作用_Javascript_Jquery_Jquery Events - Fatal编程技术网

Javascript jQuery:not()选择器在.off()方法中不起作用

Javascript jQuery:not()选择器在.off()方法中不起作用,javascript,jquery,jquery-events,Javascript,Jquery,Jquery Events,为什么:not()或:has()方法中的.off()选择器不完全受支持 $(document).off()解除文档中所有事件的绑定 $(文档).off('.MyNamspace')取消绑定使用命名空间创建的所有事件'MyNamspace'例如$(文档).on('click.MyNamespace','a',function(){}) 但是 $(document).off(':not(.MyNamspace)返回正则表达式错误 有可能在以后实施吗 更详细的问题: 假设我有一个HTML基本框架,例如

为什么
:not()
:has()
方法中的
.off()
选择器不完全受支持

$(document).off()
解除文档中所有事件的绑定

$(文档).off('.MyNamspace')
取消绑定使用命名空间创建的所有事件
'MyNamspace'
例如
$(文档).on('click.MyNamespace','a',function(){})

但是

$(document).off(':not(.MyNamspace)
返回正则表达式错误

有可能在以后实施吗

更详细的问题:

假设我有一个HTML基本框架,例如一个导航栏和一些事件,它们用定义的限定符绑定在一起。在这个框架中,是一个容器,它保存可变内容和动态加载的JavaScript,还绑定了动态加载容器中元素上的事件

如果内容发生更改,我还希望删除相关的JavaScript部分和所有事件,除了我自己的(以及其他类似引导事件)createt for the framework

动态加载的JavaScript严格加载到如下对象中:

foo = new whatEverYouWant();
当容器的内容被其他内容替换时,我将foo设置为undefined或null,所有定义的变量和方法都消失了

但如果用户分配了以下事件:

$(document).on('mousemove', function(e) {
  console.lg(e,'bla bla bla');
});
删除内容后,事件将被保留。

正如您在“事件上不能使用选择器”参数上看到的那样

.off(事件[,选择器][,处理程序])

事件类型: 字符串一个或多个空格分隔的事件类型和 可选名称空间,或仅名称空间,如“单击”, “keydown.myPlugin”或“.myPlugin”

是吗

.off([selector])

所以你必须这么做

$(document).off('events','[selector]')

正如您在“不能在事件上使用选择器”参数上看到的那样

.off(事件[,选择器][,处理程序])

事件类型: 字符串一个或多个空格分隔的事件类型和 可选名称空间,或仅名称空间,如“单击”, “keydown.myPlugin”或“.myPlugin”

是吗

.off([selector])

所以你必须这么做


$(document).off('events','[selector]')

没有神奇的方法来过滤名称空间

但是,您可以使用
$。\u数据(元素,'events')
访问分配给元素的所有jQuery事件

返回的对象使用eventName作为键,每个键包含一个对象数组,其中包含
名称空间
选择器
等属性

然后,您可以迭代各种事件并执行以下操作:

/**
*@param{DomNode}element-用于从中删除命名空间事件的元素。
*@param{array}keepNamespaces-不删除的名称空间数组。
*/
函数removeOtherNameSpaces(元素,keepNamespaces){
变量事件=$。_数据(元素“事件”),
$el=$(元素);
$.each(事件,函数(事件名,arr){
$。每个(arr,函数(uj,obj){
如果(!obj)返回;
if(obj.namespace&$.inArray(obj.namespace,keepnamespace)=-1){
log('Removed::Event:',eventName',namespace:',obj.namespace)
$el.off('.'+obj.namespace);
}
});
});
}
//演示
$(文档).on('click.click-1','p',function(){
console.log('命名空间:click-1已触发')
}).on('click.click-2','p',函数(){
console.log('命名空间:click-2已触发')
}).on('mouseenter.mouse-1','p',function(){
log('命名空间:鼠标-1已触发')
})
$(“按钮”)。单击(函数(){
var keepNamespaces=['click-1'];
移除其他名称空间(文档、keepNamespaces)
});


悬停并单击我-单击按钮之前

删除命名空间事件
没有神奇的方法来过滤名称空间

但是,您可以使用
$。\u数据(元素,'events')
访问分配给元素的所有jQuery事件

返回的对象使用eventName作为键,每个键包含一个对象数组,其中包含
名称空间
选择器
等属性

然后,您可以迭代各种事件并执行以下操作:

/**
*@param{DomNode}element-用于从中删除命名空间事件的元素。
*@param{array}keepNamespaces-不删除的名称空间数组。
*/
函数removeOtherNameSpaces(元素,keepNamespaces){
变量事件=$。_数据(元素“事件”),
$el=$(元素);
$.each(事件,函数(事件名,arr){
$。每个(arr,函数(uj,obj){
如果(!obj)返回;
if(obj.namespace&$.inArray(obj.namespace,keepnamespace)=-1){
log('Removed::Event:',eventName',namespace:',obj.namespace)
$el.off('.'+obj.namespace);
}
});
});
}
//演示
$(文档).on('click.click-1','p',function(){
console.log('命名空间:click-1已触发')
}).on('click.click-2','p',函数(){
console.log('命名空间:click-2已触发')
}).on('mouseenter.mouse-1','p',function(){
log('命名空间:鼠标-1已触发')
})
$(“按钮”)。单击(函数(){
var keepNamespaces=['click-1'];
移除其他名称空间(文档、keepNamespaces)
});


悬停并单击我-单击按钮之前

删除命名空间事件
因为它们是元素选择器过滤器…不是事件或命名空间过滤器
$(文档)。不是('.someClass')。关闭('someEvent')
?。not()只适用于(类)元素选择器而不是命名空间:O/因为它们是元素选择器过滤器…不是事件或命名空间过滤器
$(文档)。不是('.someClass')。关闭('someEvent'))
?.not()仅适用于(类)元素选择器,不适用于名称空间:O/名称空间用于事件。与元素选择器无关Lol在否决投票前阅读该死的API您不能在您选择的事件上使用选择器