【发布时间】:2019-04-04 06:14:30
【问题描述】:
我有一个带有提交按钮的输入表单。我不希望用户能够双击提交按钮并再次提交表单...
所以我在我的表单中添加了以下 jQuery:
var prevSubmitTime = new Date('2000-01-01');
function preventFromBeingDoubleSubmitted() {
$('form').each(function () {
$(this).submit(function (e) {
if ($("form").valid()) {
var curSubmitTime = new Date($.now());
// prevent the second submit if it is within 2 seconds of the first submit
if (curSubmitTime - prevSubmitTime < 2000) {
e.preventDefault();
}
prevSubmitTime = new Date($.now());
}
});
});
}
$(document).ready(function () {
preventFromBeingDoubleSubmitted();
});
上面的代码存储了提交时间并防止了第二次提交,如果太早(小于2秒),我不想永久禁用提交按钮,以防出现服务器端错误。 .
这段代码可以满足我的要求,但是在调试代码时,我永远无法在e.preventDefault(); 上遇到断点...即使我双击提交按钮。
看起来第二个提交事件正在等待第一个提交事件完成后再触发。
但是,如果我删除 preventFromBeingDoubleSubmitted() 函数,那么我可以通过双击提交按钮来双重提交表单。
谁能解释为什么有时提交事件会一个接一个地立即触发……而有时情况并非如此?将事件处理程序放在.each() 中会影响它们的执行行为吗?
【问题讨论】:
-
旁注:您不需要
.each()部分,$('form').submit(...)将在内部进行迭代 -
@PatrickEvans:非常感谢您的解释。
-
我用你的代码和一些控制台日志创建了一个小提琴,正如其他人所说,问题是你正在离开页面。如果您在 chrome 中限制页面,您将看到您实际上正在执行您的功能。 jsfiddle.net/vz84j6ak/3
标签: javascript jquery html form-submit