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();
        }
    });
});