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

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

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


当前回答

当你关注输入元素时,表单通常是按Enter键提交的。

我们可以在表单中的输入元素上禁用Enter键(代码13):

$('form input').on('keypress', function(e) {
    return e.which !== 13;
});

演示:http://jsfiddle.net/bnx96/325/

其他回答

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

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

捕获和测试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年代以来,这一直是标准的浏览器行为。

$('form').keyup(function(e) {
  return e.which !== 13  
});

该事件。哪个属性规范化事件。keyCode和event.charCode。建议观看赛事。其中用于键盘按键输入。

文档。

如果你只是想在进入和提交按钮时禁用提交,也可以使用表单的onsubmit事件

<form onsubmit="return false;">

你可以将“return false”替换为调用JS函数,该函数将执行所需的任何操作,并将提交表单作为最后一步。

您可以在纯Javascript中完美地做到这一点,简单且不需要库。以下是我对类似话题的详细回答: 禁用表单输入键

简而言之,代码如下:

<script type="text/javascript">
window.addEventListener('keydown',function(e){if(e.keyIdentifier=='U+000A'||e.keyIdentifier=='Enter'||e.keyCode==13){if(e.target.nodeName=='INPUT'&&e.target.type=='text'){e.preventDefault();return false;}}},true);
</script>

This code is to prevent "Enter" key for input type='text' only. (Because the visitor might need to hit enter across the page) If you want to disable "Enter" for other actions as well, you can add console.log(e); for your your test purposes, and hit F12 in chrome, go to "console" tab and hit "backspace" on the page and look inside it to see what values are returned, then you can target all of those parameters to further enhance the code above to suit your needs for "e.target.nodeName", "e.target.type" and many more...