jquery 在输入时禁用表单提交

IT技术 javascript jquery forms form-submit
2021-02-01 13:54:51

我的页面中有以下 javascript,它似乎不起作用。

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

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

6个回答

如果keyCode没有被抓住,抓住which

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

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

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

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

问题是,如果我有一个相同形式的文本框,现在我无法在文本框中添加输入(以创建新行)。
2021-03-15 13:54:51
你需要return false;这个吗?e.preventDefault();似乎足够了
2021-03-18 13:54:51
jQuery 将其规范化为e.which,因此您无需测试e.keyCode,但对于导致此问题的最可能原因,您无需测试1。
2021-04-04 13:54:51
keyCode === 13 && !$(e.target).is('textarea')
2021-04-04 13:54:51
重要的!此解决方案块在 textarea 中中断。
2021-04-08 13:54:51

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

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

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

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

这可以防止在同一表单中使用回车textareas使用$("form input")而不是$("form :input")似乎可以解决它。演示:jsfiddle.net/bnx96/279
2021-03-18 13:54:51
iOS Go 按钮是我在自定义自动完成输入字段上的问题。这解决了它。
2021-04-09 13:54:51

更短:

$('myform').submit(function() {
  return false;
});
@haibuihoang 是的,这将禁用表单提交。
2021-03-12 13:54:51
但这也会阻止用户点击吗?
2021-03-13 13:54:51
@ user1111929 这确实很好用,但它不应该是最佳答案,因为该问题仅询问Enter而不是关于禁用Submit按钮提交表单
2021-03-24 13:54:51
您应该function(e) {e.preventDefault();}在事件处理程序中使用返回值已被弃用:stackoverflow.com/a/20045473/601386
2021-03-27 13:54:51
如果您决定使用 jQueryonClick事件来验证表单,并且仍然使用 jQuery提交,那么您可能希望保留表单提交,但在按下“输入”键时禁用提交的常见情况换句话说,有些情况下您只想通过 javascript/jQuery 提交。虽然您仍然可以在此解决方案中使用 AJAX,但它禁用了该submit方法的基本功能
2021-03-29 13:54:51
$('form').keyup(function(e) {
  return e.which !== 13  
});

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

which 文档。

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

此解决方案适用于网站上的所有表单(也适用于使用 ajax 插入的表单),仅防止输入文本中的 Enter。把它放在一个文档就绪函数中,一辈子忘掉这个问题。