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

时间:2012-03-12 17:17:48

标签: jquery html textarea submit keystroke

$(window).keydown(function(event){
    if(event.keyCode == 13) {
      event.preventDefault();
      return false;
    }
  });

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

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

7 个答案:

答案 0 :(得分:11)

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

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

demo

答案 1 :(得分:9)

你可以试试这个

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

小提琴是here

答案 2 :(得分:5)

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

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

答案 3 :(得分:2)

$('#form_editar').keypress(function(e) {
    var allowEnter = {"textarea": true, "div": true};
    var nodeName = e.target.nodeName.toLowerCase();

    if (e.keyCode == 13 && allowEnter[nodeName] !== true) {
        e.preventDefault();
    }
});

我从@The Alpha编辑了一下,我使用div作为wysiwyg编辑:)...

答案 4 :(得分:1)

这似乎是一个很好的机会,可以在这种蚊子上使用事件对象和类似手术刀的方法,而不是类似于大炮的方法。

换句话说,就像这样:

...
// Only watch for a bad type of submission when a submission is requested.
$('form .contact-form').submit(function(e){
    // If a submit is requested, and it's done via keyboard enter, stop it.
    if ((e.keyCode || e.which) == 13) ? ;){ // Try to use normalized enter key code
        e.preventDefault(); // Prevent the submit.
    }
    // All other mouse actions just go through.
});

这里的优势应该比较明显,如果你在任何不提交表格的地方点击输入,这段代码不知道,不关心,不会造成问题。

答案 5 :(得分:1)

我发现这个效果最好。特别是如果你想在其他元素中使用回车键行为而不是发回表单。我只是在扩展3nigma的答案。

 $("form").keypress(function (event) {
            if (event.keyCode == 13 && ($(event.target)[0]!=$("textarea")[0])) {
                return false;
            }
        });

答案 6 :(得分:0)

为什么不阻止表单的submit事件触发?

$('form').submit(function(event){
  event.preventDefault();
});