防止"输入"提交表单,但允许在textarea字段(jQuery)上

jef*_*kee 11 html jquery textarea keystroke submit

$(window).keydown(function(event){
    if(event.keyCode == 13) {
      event.preventDefault();
      return false;
    }
  });
Run Code Online (Sandbox Code Playgroud)

以上是我得到的代码,它有效地将"输入"键作为整个系统中的表单提交者来杀死,这正是我想要的.但是,也会在textarea标记上禁用回车键- 用户应该能够点击该标记以进入下一行.那么有没有办法修改上面的代码来检测输入是否来自一个textarea标签,它不运行该event.preventDefault();行?

我在整个网站上有这么多形式 - 不得不单独配置它们将是一场噩梦,可能没有意义 - 必须有一种通用的方式.上面的代码在网站的每个页面上运行,以防止通过点击"输入"意外提交.

Raf*_*fay 11

我更喜欢这个keyup事件...使用该event.target属性

$(window).keydown(function(event){
    if((event.which== 13) && ($(event.target)[0]!=$("textarea")[0])) {
      event.preventDefault();
      return false;
    }
  });
Run Code Online (Sandbox Code Playgroud)

演示

  • 观看每一次进入赛事都有点......过度杀伤.我认为,如果你在页面顶部有一个搜索框,比如搜索网站,这实际上会破坏搜索框的功能......对于碰巧就在附近的任何其他小部件也是如此. (2认同)

The*_*pha 10

你可以试试这个

$(document).ready(function(){
    $(window).keydown(function(event){
        if(event.keyCode == 13 && event.target.nodeName!='TEXTAREA')
        {
          event.preventDefault();
          return false;
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

这里有一个小提琴.

  • 这很好用,因为它不仅仅符合第一个文本区域。它涵盖了页面上的所有文本区域。谢谢堆。 (2认同)

Jov*_*vic 5

@ 3nigma的解决方案可以正常工作,但这是另一种实现此行为的方法:

$(function(){
    $('#myform').find('input,select').keydown(function(event){
        if ( event.keyCode == 13 ){
            event.preventDefault();
        }
    });
});
Run Code Online (Sandbox Code Playgroud)