我有以下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;
}

其他回答

我听说哪个是不推荐的,所以把最佳评分的答案改成这个。

$('#formid').on('keyup keypress', function(e) {
  if (e.key === 'Enter') { 
    e.preventDefault();
    return false;
  }
});

引用https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/which

如果keyCode未被捕获,则捕获哪个:

$('#formid').on('keyup keypress', function(e) {
  var keyCode = e.keyCode || e.which;
  if (keyCode === 13) { 
    e.preventDefault();
    return false;
  }
});

编辑:错过了它,最好使用键up而不是按键

编辑2:在一些较新版本的Firefox中,表单提交不会被阻止,因此在表单中添加按键事件会更安全。它也不能工作(不再?),只是将事件绑定到表单“name”,但只绑定到表单id。因此,我通过适当地更改代码示例使这一点更加明显。

修改bind()为on()

下面是一个简单的JavaScript解决方案,没有使用不同的处理键下或按键事件的变化:

document.forms[0].addEventListener('submit', function(e) {
    if(document.activeElement.getAttribute('type') !== 'submit') {
        e.preventDefault();
    }
});

只有当页面上的活动元素是提交按钮时,才会提交表单。 因此,您可以通过单击提交按钮或在提交按钮有焦点时按ENTER键提交表单。

这个怎么样:

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

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

$(document).on('keyup keypress', 'form input[type="text"]', function(e) {
  if(e.which == 13) {
    e.preventDefault();
    return false;
  }
});

这个解决方案适用于网站上的所有表单(也适用于插入ajax的表单),只防止输入文本中的输入。把它放在文档就绪函数中,然后永远忘记这个问题。