输入时jquery禁用表单提交

Ada*_*itt 197 javascript forms jquery form-submit

我的页面中有以下javascript似乎不起作用.

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

我想禁止在输入时提交表单,或者更好的是,调用我的ajax表单提交.这两种解决方案都是可以接受的,但我上面提到的代码并不能阻止表单提交.

zes*_*ssx 404

如果keyCode没有被捕获,请抓住which:

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

编辑:错过了,最好用keyup而不是keypress

编辑2:与一些较新版本的Firefox一样,表单提交没有被阻止,将keypress事件添加到表单也更安全.它也不起作用(不再?)只是将事件绑定到表单"name"但仅限于表单id.因此,我通过适当地更改代码示例使这一点变得更加明显.

编辑3:更改bind()on()

  • jQuery将它标准化为`e.which`,因此您不需要测试`e.keyCode`,但+1最可能导致此问题. (15认同)
  • 重要!这个解决方案块在textarea中断. (8认同)
  • `keyCode === 13 && !$(e.target).is('textarea')` (5认同)
  • 你需要`return false;`吗?`e.preventDefault();`似乎很有意思 (4认同)
  • 问题是如果我以相同的形式存在文本框,现在我无法在文本框中添加输入(以创建新行). (4认同)
  • @zessx如果使用keyup,这似乎不起作用.见http://jsfiddle.net/bD9jN/1/ (2认同)
  • 这(和小提琴)似乎不再工作(FF21):( (2认同)

Vis*_*ioN 59

通常Enter在您关注输入元素时提交表单.

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

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

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

  • 这可以防止**enter**键在同一表单中的`textareas`中使用.使用`$("form input")`而不是`$("form:input")`似乎解决了这个问题.演示:http://jsfiddle.net/bnx96/279/ (10认同)

小智 41

更短:

$('myform').submit(function() {
  return false;
});
Run Code Online (Sandbox Code Playgroud)

  • 但这也会阻止用户点击? (35认同)
  • 您应该使用`function(e){e.preventDefault();}`,因为不推荐使用事件处理程序中的返回值:http://stackoverflow.com/a/20045473/601386 (7认同)
  • @ user1111929这确实很有效,但它不应该是最佳答案,因为问题只涉及"Enter"而不是"提交"按钮禁用表单提交. (6认同)
  • @haibuihoang是的,这将禁用表单提交. (5认同)

gdo*_*ica 23

$('form').keyup(function(e) {
  return e.which !== 13  
});
Run Code Online (Sandbox Code Playgroud)

event.which财产归event.keyCode和event.charCode.建议观看event.which键盘输入键.

which 文档.


Buz*_*zlo 14

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

此解决方案适用于网站上的所有表单(也适用于使用ajax插入的表单),仅防止输入文本中的输入.将它放在文档就绪功能中,并终生忘记这个问题.


Zvi*_*ler 9

简单的方法是将按钮的类型更改为按钮 - 在 html 中,然后在 js 中添加事件...

从此改变:

<form id="myForm">
   <button type="submit">Submit</button>
</form>
Run Code Online (Sandbox Code Playgroud)

<form id="myForm">
   <button type="button" id="btnSubmit">Submit</button>
</form>
Run Code Online (Sandbox Code Playgroud)

并在 js 或 jquery 添加:

$("#btnSubmit").click(function () {
    $('#myForm').submit();
});
Run Code Online (Sandbox Code Playgroud)


jea*_*ste 8

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

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


Cos*_*sta 7

必须捕获并测试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>
Run Code Online (Sandbox Code Playgroud)

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

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


Per*_*vic 5

如果您只想在输入和提交按钮上禁用提交,请使用表单的onsubmit事件

<form onsubmit="return false;">
Run Code Online (Sandbox Code Playgroud)

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


Tar*_*rik 5

您可以在纯 Javascript 中完美地做到这一点,简单且不需要库。这是我对类似主题的详细回答: Disabling enter key for form

简而言之,这里是代码:

<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>
Run Code Online (Sandbox Code Playgroud)

此代码仅用于防止输入 type='text' 的“Enter”键。(因为访问者可能需要在整个页面上按回车)如果您还想为其他操作禁用“回车”,您可以添加 console.log(e); 为了您的测试目的,在 chrome 中点击 F12,转到“控制台”选项卡并点击页面上的“退格”并查看内部以查看返回的值,然后您可以定位所有这些参数以进一步增强代码以上以满足您对"e.target.nodeName""e.target.type"等的需求...

  • 实际上它应该是`e.target.nodeName === 'INPUT' &amp;&amp; e.target.type !== 'textarea'`。使用指定的代码,如果聚焦单选框或复选框,它将允许提交表单。 (2认同)