【发布时间】:2012-05-06 11:19:15
【问题描述】:
我有一个类似这样的 jQuery / HTML 代码:
<form action="/SomeAction" method="post">
<input id="my-textbox" type="text" placeholder="Write something and press enter to continue..." />
</form>
<script type="text/javascript">
$(function() {
$('#my-textbox').keyup(function(e) {
var $textbox = $(this);
if ($textbox.val().length > 0 && e.keyCode == 13) {
$textbox.parent('form').submit();
}
});
});
</script>
目的是在用户按下 Enter 键时自动提交表单。我经常使用 Firefox,所以在我使用 Google Chrome 和 Internet Explorer 进行测试之前一切正常。
当我在后来的浏览器中按下 Enter 键时,有时我会提交两次表单。这很容易引起注意,因为我会在我的数据库中获得重复的条目,并且我会看到两个使用 Fiddler 的 POSTs。
经过一些测试,我发现我的问题是 jQuery 代码,因为没有它,文本框会在输入时自动提交,并且在某些浏览器中使用此代码会产生第二个 POST。
我的问题是:
为什么浏览器不能巧妙地阻止第二个表单发布(就像 Firefox 在我的测试中所做的那样)?
我应该在所有平台的所有主要浏览器中都看到这种行为吗?
有没有办法改进这段代码,所以我使用 JavaScript 执行提交,但没有提交两次表单?
【问题讨论】:
-
尝试阻止默认事件。
-
您在 keyup 上提交了表单。每次文本字段中有 keyup 事件时,您都请求 JavaScript 提交表单。你得到的正是你想要的。
-
我不是 jquery 专家,但我会将您的代码与表单中的提交事件挂钩(或在其上挂钩阻止其默认行为的函数)
-
@EvikJames 不正确。只有当字段不为空并且按下的键是回车键时,他才会提交表单。仔细看看。
-
如何在不使用键盘的情况下提交表单?例如,点击获得焦点、语音识别输入文本等等……什么?
标签: javascript jquery forms jquery-events double-submit-problem