繁体   English   中英

关于按键和jQuery的快速问题

[英]A quick question about keypress and jQuery

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

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

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

(除了,那不行...)

有任何想法吗?

非常感谢!

ps里面所有的功能都是一个switch语句。

[编辑]嘿家伙ñ女同胞们-我不能return false; 因为我需要输入的元素是<input>文本,所以键盘仍然需要返回此处。

这真的让我感到困惑:(

如果您确实想将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() 帮助来完成的

这是通过检查目标元素的id是否不是pinkElephant来执行所需操作的另一种方法。 由于此方法不使用通用选择器'*'因此它应具有更好的性能:

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

这是一个工作示例。

(从评论更新)

我假设您不希望pinkElephant元素触发keydown

#pinkElephant上放置一个处理程序,以停止事件的传播。

$('#pinkElephant').bind('keydown',false);

请注意,将false传递到.bind()需要jQuery 1.4.3或更高版本。

如果您使用的是旧版本,请执行以下操作:

$('#pinkElephant').bind('keydown',function(){return false;});

尝试以下方法:

$(':not(#pinkElephant)').keydown(function(e) { 
    // ...
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM