jQuery-*:not()不排除元素

jQuery-*:not()不排除元素,jquery,jquery-selectors,Jquery,Jquery Selectors,我的目标是禁用除和标记之外的所有右键单击。我正在使用*:not(kbd,textarea)排除禁用右键单击-.on('contextmenu',function(e){e.preventDefault();})。假设我可以右键单击和标记,但我不能。是威德 $(文档).ready(函数(){ $('*:not(kbd,textarea)')。on('contextmenu',函数(e){ e、 预防默认值(); }); }); div{ 宽度:170px; 高度:170px; 背景颜色:绿色;

我的目标是禁用除
标记之外的所有右键单击。我正在使用
*:not(kbd,textarea)
排除禁用右键单击-
.on('contextmenu',function(e){e.preventDefault();})。假设我可以右键单击
标记,但我不能。是威德

$(文档).ready(函数(){
$('*:not(kbd,textarea)')。on('contextmenu',函数(e){
e、 预防默认值();
});
});
div{
宽度:170px;
高度:170px;
背景颜色:绿色;
}

右击我
右击我
不能右键单击我
需要澄清的是:
*:not(kbd,textarea)
工作正常。问题与浏览器中如何处理事件有关

大多数事件都会突然发生。由于
元素位于
内部,因此绑定到
的事件处理程序将始终取消
上下文菜单
事件

根据您的具体用例,您可以简单地检查事件是否起源于元素本身,并仅在这种情况下防止它:

$(文档).ready(函数(){
$('*:not(kbd,textarea)')。on('contextmenu',函数(e){
如果(此===e.target){
e、 预防默认值();
}
});
});
div{
宽度:170px;
高度:170px;
背景颜色:绿色;
}

右击我
右击我
不能右键单击我
需要澄清的是:
*:not(kbd,textarea)
工作正常。问题与浏览器中如何处理事件有关

大多数事件都会突然发生。由于
元素位于
内部,因此绑定到
的事件处理程序将始终取消
上下文菜单
事件

根据您的具体用例,您可以简单地检查事件是否起源于元素本身,并仅在这种情况下防止它:

$(文档).ready(函数(){
$('*:not(kbd,textarea)')。on('contextmenu',函数(e){
如果(此===e.target){
e、 预防默认值();
}
});
});
div{
宽度:170px;
高度:170px;
背景颜色:绿色;
}

右击我
右击我
不能右键单击我

上下文菜单事件是否会冒泡我的任何机会,从而被外部
(或
)阻止。编辑:是的,看起来就是这样。将
$('*:not(kbd,textarea)
替换为
$('*:not(kbd):not(textarea))
@IvanKaraman:那为什么有必要呢?@FelixKling,
上下文菜单
之外单击时显示@IvanKaraman,我以前试过,但没用。@Felix Kling:如果你和我一样,而且你绝对不喜欢在jQuery中使用非标准选择器,那么即使它确实不起作用,也可以认为它是必要的。(至于Ivan,我想他要么没有意识到
:not(kbd,textarea)
在jQuery中工作,要么像许多人一样,他太担心性能,因此更喜欢标准选择器。)
contextmenu
事件是否会冒出我的任何机会,从而被外部
(或
)阻止。编辑:是的,看起来就是这样。将
$('*:not(kbd,textarea)
替换为
$('*:not(kbd):not(textarea))
@IvanKaraman:那为什么有必要呢?@FelixKling,
上下文菜单
之外单击时显示@IvanKaraman,我以前试过,但没用。@Felix Kling:如果你和我一样,而且你绝对不喜欢在jQuery中使用非标准选择器,那么即使它确实不起作用,也可以认为它是必要的。(至于Ivan,我认为他要么没有意识到
:not(kbd,textarea)
在jQuery中工作,要么像许多人一样,他太担心性能,因此更喜欢标准选择器。)输入错误。应该使用
e
而不是
event
。谢谢嗯,我现在明白怎么回事了,因为我很好奇为什么
div>*:not(kbd,textarea)
也不起作用。应该使用
e
而不是
event
。谢谢嗯,我现在明白怎么回事了,因为我很好奇为什么
div>*:not(kbd,textarea)
也不起作用。