【发布时间】:2016-12-09 17:44:10
【问题描述】:
我的目标是在除<kbd> 和<textarea> 标签之外的所有地方禁用右键单击。我正在使用*:not(kbd,textarea) 排除禁用右键单击-.on('contextmenu', function(e){ e.preventDefault(); });。假设我可以右键单击<kbd> 和<textarea> 标签,但我不能。这很奇怪。
$(document).ready(function(){
$('*:not(kbd,textarea)').on('contextmenu', function(e){
e.preventDefault();
});
});
div {
width: 170px;
height: 170px;
background-color: green;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
<kbd>right click me</kbd>
<textarea>right click me</textarea>
can't right click me
</div>
【问题讨论】:
-
contextmenu事件是否会冒出我的任何机会,以便外部<div>(或<body>)阻止它。编辑:是的,看起来就是这样。 -
将
$('*:not(kbd,textarea)')替换为$('*:not(kbd):not(textarea)) -
@IvanKaraman:为什么有必要这样做?
-
@FelixKling,
contextmenu在<div>外部单击时显示。 @IvanKaraman,我之前尝试过,但不起作用。 -
@Felix Kling:如果你和我一样,并且你绝对鄙视在 jQuery 中使用非标准选择器,那么即使它确实不是,也可以被视为必要的。 (至于 Ivan,我认为他要么没有意识到
:not(kbd,textarea)在 jQuery 中工作,要么像许多人一样,他过于担心性能并因此更喜欢标准选择器。)