我有以下javascript在我的页面似乎不工作。

$('form').bind("keypress", function(e) {
  if (e.keyCode == 13) {               
    e.preventDefault();
    return false;
  }
});

我想在进入时禁用提交表单,或者更好的是,调用我的ajax表单提交。任何一种解决方案都是可以接受的,但上面包含的代码不会阻止表单提交。


当前回答

以上大多数答案将阻止用户在textarea字段中添加新行。如果这是你想要避免的情况,你可以通过检查当前有焦点的元素来排除这种特殊情况:

var keyCode = e.keyCode || e.which;
if (keyCode === 13 && !$(document.activeElement).is('textarea')) {
  e.preventDefault();
  return false;
}

其他回答

这个怎么样:

$(":submit").closest("form").submit(function(){
    $(':submit').attr('disabled', 'disabled');
});

这应该禁用所有表单提交按钮在你的应用程序。

捕获和测试ENTER键的每一次击键确实让我很恼火,所以我的解决方案依赖于以下浏览器行为:

按下ENTER将触发提交按钮上的单击事件(在IE11, Chrome 38, FF 31中测试)** (参考:http://mattsnider.com/how-forms-submit-when-pressing-enter/)

所以我的解决方案是删除标准提交按钮(即<input type="submit">),这样上述行为就会失败,因为当按下ENTER键时没有提交按钮可以神奇地点击。相反,我在一个常规按钮上使用jQuery点击处理程序,通过jQuery的.submit()方法提交表单。

<form id="myform" method="post">
  <input name="fav_color" type="text">
  <input name="fav_color_2" type="text">
<button type="button" id="form-button-submit">DO IT!</button>
</form>

<script>
 $('#form-button-submit').click(function(){
    $('#myform').submit();
  });
</script>

演示:http://codepen.io/anon/pen/fxeyv?editors=101

**如果表单只有一个输入字段并且该字段是'text'输入,则此行为不适用;在这种情况下,即使HTML标记中没有提交按钮(例如,搜索字段),表单也会按ENTER键提交。自90年代以来,这一直是标准的浏览器行为。

在firefox中,当你按下input并按下enter,它会提交它的上层形式。解决方案是在提交表单中添加以下内容:

<input type="submit" onclick="return false;" style="display:none" />

我不知道你是否已经解决了这个问题,或者现在有人试图解决这个问题,但是,这是我的解决方案!

$j(':input:not(textarea)').keydown(function(event){
    var kc = event.witch || event.keyCode;
    if(kc == 13){
    event.preventDefault();
        $j(this).closest('form').attr('data-oldaction', function(){
            return $(this).attr('action');
        }).attr('action', 'javascript:;');

        alert('some_text_if_you_want');

        $j(this).closest('form').attr('action', function(){
            return $(this).attr('data-oldaction');
        });
        return false;
    }
});
$('#FormID').on('keyup keypress', function (e) {
        var keyCode = e.keyCode || e.which;
        if (keyCode === 13) {
            e.preventDefault();
            return false;
        }
    });