在jQuery中检测Textarea对象

时间:2014-01-03 15:37:51

标签: javascript jquery html

当客户填写表格时,我有一些jQuery来抑制回车:

$('form.eForm:not(.suppress-submit-on-enter-key-disabled) :not(:button, :submit)').keypress(function(e){
  if(e.which == 13){
    // Cancel submit event
    e.preventDefault();
    // Give focus to next input element
    $(':input').eq($(this).index(':input') + 1).focus();
  }
});

但是,它还设法在我们的评论框中取消了回车。

添加textarea检查器似乎很简单,就像现有代码必须检查:not(:button,:submit)

$('form.eForm:not(.suppress-submit-on-enter-key-disabled) :not(:button, :submit, :textarea)').keypress(function(e){
  if(e.which == 13){
    // Cancel submit event
    e.preventDefault();
    // Give focus to next input element
    $(':input').eq($(this).index(':input') + 1).focus();
  }
});

糟糕! :not(:button,:submit,:textarea)无法正常工作,因为似乎没有为jQuery的这一部分定义textarea

其他人如何检测这些 TextArea 控件?

更新

在这里发布答案的人之一竟然得到了解决方案。

生成所有表单的eForm类以某种方式捕捉到它。

我和我的经理花了几个小时的时间来解决这个问题,但最后我需要做的只是处理来自输入控件的事件。

以下是我们的最终结果:

$('form.eForm:not(.suppress-submit-on-enter-key-disabled) :input:not(:button, :submit, textarea)').keypress(function (e) {
  if(e.which == 13){
    // Cancel submit event
    e.preventDefault();
    // Give focus to next input element
    $(':input').eq($(this).index(':input') + 1).focus();
  }
});

特别感谢Khawer Zeshan提供小提琴。事实证明,我的代码存在更深层次的错误。

2 个答案:

答案 0 :(得分:4)

为什么不将id用于多个选择器的单textareaclass名称?

只有一个textarea

$('#textareaid').keypress(function(e){
  if(e.which == 13){
    // Cancel submit event
    e.preventDefault();
    // Give focus to next input element
    $(':input').eq($(this).index(':input') + 1).focus();
  }
});

对于多个字段,请使用class name并对这些字段应用相同的类:

$('.textareaClass').keypress(function(e){
  if(e.which == 13){
    // Cancel submit event
    e.preventDefault();
    // Give focus to next input element
    $(':input').eq($(this).index(':input') + 1).focus();
  }
});

<强> FIDDLE

答案 1 :(得分:1)

我最近有同样的顾虑,并为它创建了这个非常简单的jQuery插件

https://github.com/aymanrb/jquery-tabable-required