使用 jQuery 在“Enter”上提交表单?

IT技术 javascript jquery html webkit forms
2021-01-28 19:17:25

我有一个沼泽标准登录表单 - 一个电子邮件文本字段、一个密码字段和一个使用 HTML/jQuery 的 AIR 项目上的提交按钮。当我在表单上按 Enter 键时,整个表单的内容都消失了,但表单并未提交。有谁知道这是 Webkit 问题(Adobe AIR 使用 Webkit for HTML),还是我搞砸了?

我试过:

$('.input').keypress(function (e) {
  if (e.which == 13) {
    $('form#login').submit();
  }
});

但这既没有停止清算行为,也没有提交表格。没有与表单相关的操作 - 这可能是问题吗?我可以在动作中放置一个 javascript 函数吗?

6个回答
$('.input').keypress(function (e) {
  if (e.which == 13) {
    $('form#login').submit();
    return false;    //<---- Add this line
  }
});

看看这个 stackoverflow 答案: event.preventDefault() vs. return false

本质上,“返回假”与调用e.preventDefaultand相同e.stopPropagation()

如果您想先在输入字段中输入,请输入“return false;” 在 if 语句中。
2021-03-11 19:17:25
@mbokil 除了在使用 jQuery 时,在 IE8 中是一样的。和IE7。和IE6。
2021-03-12 19:17:25
请注意,它们并不相同。IE8 没有 e.preventDefault。对于 IE8 使用 event.returnValue = false;
2021-03-27 19:17:25

除了 Jason Cohen 提到的返回 false 之外。您可能还必须防止默认

e.preventDefault();
正如@NoBrainer 所说,这是错误的:return false在由 jQuery 管理的事件中自动调用 e.preventDefault()
2021-04-09 19:17:25

不知道它是否会有所帮助,但您可以尝试模拟提交按钮的点击,而不是直接提交表单。我在生产中有以下代码,它工作正常:

    $('.input').keypress(function(e) {
        if(e.which == 13) {
            jQuery(this).blur();
            jQuery('#submit').focus().click();
        }
    });

注意:jQuery('#submit').focus()在按下 enter 时使按钮动画。

效果很好,但我必须添加“返回假;” 防止重复提交表单。
2021-03-11 19:17:25
工作 | 看到很多像这样谈论触发器、sendkey 等的结果,呵呵,等等...,但这是唯一对我有用的方法,真正发送一个按钮的点击。不提交()。所以,诀窍是在 secuence 中使用 focus().click() 函数。谢谢。
2021-03-14 19:17:25
有效,但我必须将此代码放在: $(document).ready(function() {...
2021-04-01 19:17:25

返回false以防止击键继续。

是否有任何理由必须挂钩并测试回车键?

你不能简单地添加一个

<input type="submit" /> 

到您的表单并在按下输入时自然提交?如果需要,您甚至可以挂钩表单的onsubmit操作并从那里调用验证函数......

您甚至可以将onsubmit用作测试来查看您的表单是否正在提交,但如果您调用form.submit().

确实……我忽略了整件事return false;
2021-03-13 19:17:25
问题是,如果您正在执行 ajax 操作并且没有实际回发到服务器,但您希望 UI 表现得像用户期望的那样怎么办?
2021-03-15 19:17:25
完全同意。我的偏好始终是使用浏览器的本机功能(type=submit 的输入本机响应回车键),而不是添加更多杂乱无章的脚本。
2021-03-28 19:17:25