关于keypress和jQuery的快速问题

Bar*_*der 1 javascript jquery

$(document).keydown(function(e) {

嗯,这是我的代码 - 我想知道是否有可能有这样的东西:

$(document).not('#pinkElephant').keydown(function(e) {

(除了,这不起作用......)

有任何想法吗?

非常感谢!

ps所有函数都在其中,是一个switch声明.

[编辑]嘿家伙n gals - 我不能,return false;因为我需要输入的元素是<input>文本,所以键盘仍然需要返回这里.

这让我很困惑:(

jAn*_*ndy 5

如果你真的想要绑定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()


mVC*_*Chr 5

这里有一个替代的方式做,你需要通过检查目标元素的东西id是不是pinkElephant.由于这不使用通用选择器,'*'它应该执行得更好:

$(document).keydown(function(e) {
    if (e.target.id !== "pinkElephant") {
        alert("I'm not pink!");
    }
});
Run Code Online (Sandbox Code Playgroud)

这是一个有效的例子.

(从评论更新)