jquery:在 keyup 上执行此操作,除非该人在文本区域或输入中

Posted

技术标签:

【中文标题】jquery:在 keyup 上执行此操作,除非该人在文本区域或输入中【英文标题】:jquery: do this on keyup, unless the person is in a textarea or input 【发布时间】:2011-04-16 19:41:37 【问题描述】:

我的脚本有效,但我不明白如何使它在 textarea/input 中并且按下这些键时不启动功能。 aka:当用户按下该键时启动事件,除非用户在 textarea/input 中。

$('body').keyup(function (event) 

var direction = null;
if (event.keyCode == 37) 
  $('#wrapper').fadeOut(500)
 else if (event.keyCode == 39) 
        $('html,body').animate(scrollTop: $('body').offset().top, duration: 1500, easing: 'easeInOutQuart'
        )
return false;    

     )

【问题讨论】:

【参考方案1】:

只需检查 event.target:

$('body').keyup(function(event) 
    if ($(event.target).is(':not(input, textarea)')) 
       ...
    
);

在这种情况下,您仍然只有一个事件处理程序(附加到主体),但它会过滤接收事件的元素

【讨论】:

如果您不想处理它,为什么要首先将事件分配给输入? 这里我们将事件分配给正文,而不是输入。稍后只需使用输入和文本区域进行过滤。然后将事件分配给除输入之外的所有元素要好得多【参考方案2】:

试试:

$('body *:not(textarea,input)').keyup(function (event) 

);

【讨论】:

这样的选择是不正确的,因为它会添加尽可能多的事件处理程序,就像页面上的元素一样多。 几乎正确(不包括文本区域),但这会起作用【参考方案3】:
$('body :not(textarea,input[type=text])').keyup(function (event) 

$('body').not('textarea,input[type=text]').keyup(function (event) 

【讨论】:

这个和Thariama的解决方案有同样的问题 想象一下这个页面有 10000 个元素(不要太多)。你会为每个元素分配事件吗?这没有意义 我想这对 OP 来说是一个很好的设计决策。然而,不是他要问的。 我只是建议考虑一下您的解决方案的性能。无论他要求什么。

以上是关于jquery:在 keyup 上执行此操作,除非该人在文本区域或输入中的主要内容,如果未能解决你的问题,请参考以下文章

我可以在 KeyUp 上使用 KeyBinding 吗?

jquery键盘事件及keycode大全

jQuery Cleditor 在 keyup 上获取 textarea 值

JQuery——键盘事件.keydown().keyup()和.keypress()

带有“keyup”和“change”参数的 jQuery on() 方法在移动设备上不起作用

jQuery监听键盘事件及相关操作使用