Javascript 防止表单多次提交
我有一些代码试图阻止表单多次提交。我在另一个堆栈线程上发现了此代码,但它不起作用。相反,它会无限次地提交表单,并滞后于整个服务器Javascript 防止表单多次提交,javascript,jquery,html,forms,Javascript,Jquery,Html,Forms,我有一些代码试图阻止表单多次提交。我在另一个堆栈线程上发现了此代码,但它不起作用。相反,它会无限次地提交表单,并滞后于整个服务器 $(document).ready(function() { $('form').submit(function() { console.log("hi") if ($(this).valid()) { $(this).submit(function(){ return f
$(document).ready(function() {
$('form').submit(function() {
console.log("hi")
if ($(this).valid()) {
$(this).submit(function(){
return false;
});
return true; //Tried with an without
}
});
});
以下是控制台中输出的图片:
这家公司一直在提交表格。我只是在那个号码拍了张照片
我从上面找到代码的线程是被接受的答案,它有很多投票
请注意,我每页都有多个表单,而且许多页面包含许多表单!一种特定形式的解决方案是不够的。我需要一个全球性的解决方案。此外,我正在使用Codeigniter。您需要取消初始表单提交,以便只有在验证后才能执行。但坦率地说,如果表单无效,HTML5将不会提交,因此您的代码似乎是多余的 下面是一个工作示例,它将大部分JQuery从混合中去掉。它只提交一次表单 您也可以在此处进行测试:
尝试传入事件并使用e.preventDefault()
如果我错了,请纠正我,但是,您是否应该返回
代码>如果有效,则停止提交,如jQuery文档中的
在这些答案都不起作用后,我决定再试一次。这对我有用
$(document).ready(function() {
$("form").submit(function (e) {
var attr = $(this).attr('submitted');
if (typeof attr === typeof undefined || attr === false) {
if ($(this).valid()) {
$(this).attr('submitted', 'submitted');
$(this).submit();
} else {
e.preventDefault();
}
} else {
e.preventDefault();
}
});
});
evt.preventDefault不是一个函数。
evt在错误的函数中哈哈。我会再测试一遍。@Rorymcrossan谢谢。还没醒!它仍然多次提交。在5秒内提交超过1000次。@请尝试更新的答案。不是重新定义提交事件处理函数,而是在表单有效的情况下提交。不幸的是,它仍然会提交多次。这将导致无限循环(1),因为检查事件表单的提交(2),然后在提交表单的内部返回(1)。尝试摆脱submit()
回调,并将代码附加到一个简单的按钮上。如果两个按钮都分支,则可以摆脱。你不需要否决一切。如果这是事实,你可以将你的答案标记为已接受。
$(document).ready(function() {
$('form').submit(function(e) {
e.preventDefault();
console.log("hi")
if ($(this).valid()) {
$(this).submit(function(){
return false;
});
}
});
});
$(document).ready(function() {
$('form').submit(function(event) {
console.log("hi")
if ($(this).valid()) {
return;
}
event.preventDefault();
});
});
$(document).ready(function() {
$("form").submit(function (e) {
var attr = $(this).attr('submitted');
if (typeof attr === typeof undefined || attr === false) {
if ($(this).valid()) {
$(this).attr('submitted', 'submitted');
$(this).submit();
} else {
e.preventDefault();
}
} else {
e.preventDefault();
}
});
});