如何在textareas内部防止jquery键入?

时间:2012-01-26 04:47:30

标签: jquery

我把这个事件绑定到我的'身体':

$('body').bind('keyup', doSomething);       

但我想在textareas中避免这个事件。当关注textareas时使用unbind事件,当模糊它们时重新绑定它们会花费太多。还有另一种方法吗?

哦,我也试过了:

$('body:not(textarea)').bind('keyup', doSomething); 

但没有工作。

由于

3 个答案:

答案 0 :(得分:4)

想到的两种方式是:

  1. 在您现有的处理程序中测试event.target,如果它是textarea
  2. 则不执行任何操作
  3. textarea元素上添加第二个处理程序,以阻止密钥事件的传播。
  4. 实际代码:

     // option 1
     $('body').bind('keyup', function(e) {
        if (e.target.tagName.toLowerCase()==="textarea")
           return;
    
        // your existing non-textarea code here
     });
    
     // option 2
     $('body').bind('keyup', doSomething);
    
     $('textarea').bind('keyup', function (e) {
        e.stopPropagation();
     });
    

    选项1的演示:http://jsfiddle.net/XZTaC/

答案 1 :(得分:2)

您可以在textarea中添加一个单独的处理程序来阻止事件的传播:

$('textarea').bind('keyup', function (e) {
  e.stopPropagation();
});

答案 2 :(得分:0)

我永远不会为身体绑定身体。我会以不同的方式接近它,就像这样:

$('*').not('textarea').bind('keyup', doSomething);