$(document).keydown(function(e) {
嗯,那是我的代码 - 我想知道是否有可能有类似的东西:
$(document).not('#pinkElephant').keydown(function(e) {
(除了,这不起作用......)
任何想法?
非常感谢!
P.S。所有函数都在其中,是一个switch
语句。
[edit] 嘿伙计们我不能return false;
因为我需要输入的元素是<input>
文字,所以键盘仍然需要返回此处。
这让我很困惑:(
答案 0 :(得分:5)
如果您确实要将标记中的keydown event handler
绑定到所有节点,#pinkElephant
除外,您需要这样做:
$(document).find('*').not('#pinkElephant').keydown(function() ..
或短
$(':not(#pinkElephant').keydown(function() ...
隐式使用通用选择器*
。
请注意,这在性能方面从未有过任何好处。我不知道你的标记,但我希望使用那种选择器并不是很骄傲。
<强>更新强>
受到评论的启发,您也可以这样做:
$(document).click(function(event) {
if( event.target.id === 'pinkElephant' || $.contains($('#pinkElephant')[0], event.target) )
return false;
// ...
});
上一个代码段检查是否单击了#pinkElephant
本身或子节点,并阻止传播+默认操作。这是通过调用$.contains()
help
答案 1 :(得分:5)
通过检查目标元素的id
是否不是pinkElephant
,这是另一种执行所需操作的方法。由于这不使用通用选择器'*'
,因此它应该表现得更好:
$(document).keydown(function(e) {
if (e.target.id !== "pinkElephant") {
alert("I'm not pink!");
}
});
<强> Here's a working example. 强>
(从评论更新)
答案 2 :(得分:2)
我假设您不希望pinkElephant
中的元素触发keydown
。
在#pinkElephant
上放置一个停止传播事件的处理程序。
$('#pinkElephant').bind('keydown',false);
请注意,将false
传递给.bind()
需要jQuery 1.4.3或更高版本。
如果您使用的是旧版本,请执行以下操作:
$('#pinkElephant').bind('keydown',function(){return false;});
答案 3 :(得分:0)
请改为尝试:
$(':not(#pinkElephant)').keydown(function(e) {
// ...
});