通过点击Enter阻止用户提交表单

我在一个网站上进行了一项调查,似乎有一些问题与用户点击输入(我不知道为什么),并意外提交调查(表单),而无需点击提交按钮。 有没有办法来防止这种情况?

我在调查中使用HTML,PHP 5.2.9和jQuery。


您可以使用诸如。的方法

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

在阅读关于原始帖子的评论时,为了使其更加可用,并允许人们在完成所有字段后按Enter键:

function validationFunction() {
  $('input').each(function() {
    ...

  }
  if(good) {
    return true;
  }
  return false;
}

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

不要在任何地方输入密钥

如果您的表单中没有<textarea> ,则只需将以下内容添加到<form>

<form ... onkeypress="return event.keyCode != 13;">

或者用jQuery:

$(document).on("keypress", "form", function(event) { 
    return event.keyCode != 13;
});

这将导致表单中的每个按键都将在keyCode上进行检查。 如果它不是13(Enter键),那么它将返回true,任何事情都会按预期进行。 如果它是13(回车键),那么它将返回false,任何东西都会立即停止,所以表单将不会被提交。

keypress事件比keydownkeydown因为只有在实际插入字符时才会触发此事件。 当任何按键被按下时(包括控制键), keydown (和keyup )都会被触发。 而且, keyCodekeypress代表插入实际的字符,不使用物理按键。 这样您不需要明确检查Numpad Enter键(108)是否也被按下。 该keyup是来不及阻止表单提交。

请注意,在其他答案(而不是$(document) $(window)中建议的$(window)在IE <= 8中不适用于keydown / keypress / keyup ,因此,如果您想要覆盖那些不好的用户以及。

只允许在textareas上输入密钥

如果你的表单中有一个<textarea> (当然应该接受Enter键),那么将keypress处理程序添加到不是<textarea>每个单独的输入元素。

<input ... onkeypress="return event.keyCode != 13;">
<select ... onkeypress="return event.keyCode != 13;">
...

为了减少样板,最好用jQuery来完成:

$(document).on("keypress", ":input:not(textarea)", function(event) {
    return event.keyCode != 13;
});

如果在这些输入元素上附加了其他事件处理函数,并且您还希望在出于某种原因输入密钥时调用该函数,则只能防止事件的默认行为而不是返回false,以便它可以正确传播给其他处理程序。

$(document).on("keypress", ":input:not(textarea)", function(event) {
    if (event.keyCode == 13) {
        event.preventDefault();
    }
});

只允许在textareas上输入密钥并仅提交按钮

如果你想允许按下提交按钮<input|button type="submit"> ,那么你总是可以细化选择器如下。

$(document).on("keypress", ":input:not(textarea):not([type=submit])", function(event) {
    // ...
});

请注意,在某些其他答案中建议的input[type=text]不包括那些HTML5非文本输入,因此这不是一个好的选择器。


为了防止表单被提交,我必须捕获与按键相关的所有三个事件:

    var preventSubmit = function(event) {
        if(event.keyCode == 13) {
            log("caught ya!");
            event.preventDefault();
            //event.stopPropagation();
            return false;
        }
    }
    $("#search").keypress(preventSubmit);
    $("#search").keydown(preventSubmit);
    $("#search").keyup(preventSubmit);

您可以将以上所有内容组合成一个精美的简洁版本:

    $('#search').bind('keypress keydown keyup', function(e){
       if(e.keyCode == 13) { e.preventDefault(); }
    });
链接地址: http://www.djcxy.com/p/49135.html

上一篇: Prevent users from submitting a form by hitting Enter

下一篇: Submitting a form by pressing enter without a submit button