关于keypress和jQuery的快速问题

时间:2011-01-28 23:31:36

标签: javascript jquery

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

嗯,那是我的代码 - 我想知道是否有可能有类似的东西:

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

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

任何想法?

非常感谢!

P.S。所有函数都在其中,是一个switch语句。

[edit] 嘿伙计们我不能return false;因为我需要输入的元素是<input>文字,所以键盘仍然需要返回此处。

这让我很困惑:(

4 个答案:

答案 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) { 
    // ...
});