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

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

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

4

7 回答 7

11

我更喜欢这个keyup活动......使用该event.target物业

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

演示

于 2012-03-12T17:21:06.320 回答
11

你可以试试这个

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

小提琴在这里

于 2012-03-12T17:41:41.390 回答
5

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

$(function(){
    $('#myform').find('input,select').keydown(function(event){
        if ( event.keyCode == 13 ){
            event.preventDefault();
        }
    });
});
于 2012-03-12T17:26:24.220 回答
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 用于所见即所得的编辑器:)...

于 2015-01-20T15:48:57.253 回答
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.
});

这里的优势应该是比较明显的,如果你在不提交表单的任何地方敲回车,这段代码不知道,不关心,不会造成问题。

于 2012-03-12T17:40:54.643 回答
1

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

 $("form").keypress(function (event) {
            if (event.keyCode == 13 && ($(event.target)[0]!=$("textarea")[0])) {
                return false;
            }
        });
于 2013-12-03T19:43:16.283 回答
0

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

$('form').submit(function(event){
  event.preventDefault();
});
于 2012-03-12T17:21:39.217 回答