$(document).keydown(function(e) {
嗯,这是我的代码 - 我想知道是否有可能有这样的东西:
$(document).not('#pinkElephant').keydown(function(e) {
(除了,这不起作用......)
有任何想法吗?
非常感谢!
ps所有函数都在其中,是一个switch声明.
[编辑]嘿家伙n gals - 我不能,return false;因为我需要输入的元素是<input>文本,所以键盘仍然需要返回这里.
这让我很困惑:(
如果你真的想要绑定keydown event handler到标记中的所有节点,除了#pinkElephant你需要这样做:
$(document).find('*').not('#pinkElephant').keydown(function() ..
Run Code Online (Sandbox Code Playgroud)
或短
$(':not(#pinkElephant').keydown(function() ...
Run Code Online (Sandbox Code Playgroud)
它隐式使用通用选择器*.
请注意,这在性能方面永远不会有任何好处.我不知道你的标记,但我希望使用那种选择器并不是很骄傲.
更新
受评论启发,你也可以这样做:
$(document).click(function(event) {
if( event.target.id === 'pinkElephant' || $.contains($('#pinkElephant')[0], event.target) )
return false;
// ...
});
Run Code Online (Sandbox Code Playgroud)
最后一个片段检查是否#pinkElephant单击了自身或子节点,并阻止传播+默认操作.这是通过调用帮助来完成的$.contains()
这里有一个替代的方式做,你需要通过检查目标元素的东西id是不是pinkElephant.由于这不使用通用选择器,'*'它应该执行得更好:
$(document).keydown(function(e) {
if (e.target.id !== "pinkElephant") {
alert("I'm not pink!");
}
});
Run Code Online (Sandbox Code Playgroud)
(从评论更新)