使用jQuery在提交时阻止表单重定向,直到函数完成

使用jQuery在提交时阻止表单重定向,直到函数完成,jquery,forms,submit,blocking,Jquery,Forms,Submit,Blocking,有没有一种方法可以使用jQuery强制表单在提交之前等待函数执行完毕 我在多字段表单上有一个提交按钮。我希望“提交”按钮点击服务器以确定当前用户在数据库中是否有任何项,如果没有,我希望它弹出一个确认窗口以确保用户知道。如果他们已经有一些项目,我想它跳过弹出窗口,并提交正常 我用的是这样的东西: $('#done').click(function(event) { $.post(asyncController + "/checkItems", function(response)

有没有一种方法可以使用jQuery强制表单在提交之前等待函数执行完毕

我在多字段表单上有一个提交按钮。我希望“提交”按钮点击服务器以确定当前用户在数据库中是否有任何项,如果没有,我希望它弹出一个确认窗口以确保用户知道。如果他们已经有一些项目,我想它跳过弹出窗口,并提交正常

我用的是这样的东西:

$('#done').click(function(event)
{
    $.post(asyncController + "/checkItems", function(response)
            {
                if(response != "true")
                {
                    var test = confirm('Are you sure?');
                    if(test)
                    {
                        //submit
                    } else
                    {
                        event.preventDefaultAction();
                    }
                }
            }
        );
});

不幸的是,表单并没有等待javascript完成执行,我在加载下一页的中途得到了弹出窗口。总之,它阻止了submit按钮的click事件的默认提交操作,然后我们获取对表单元素的引用,如果ajax调用和确认的结果为true,我们将提交此表单

    $('#done').click(function(event) {

        //prevent submit
        event.preventDefault();

        //get form reference
        var frm = this.form;

        $.post(asyncController + "/checkItems", function(response) {

            if (response != "true") {

                var test = confirm('Are you sure?');

                if (test) {
                    //submit the form
                    frm.submit();
                } 

            }
        });
});

+这是一个人通常做的事。不,不能同步运行异步函数,反之亦然。这需要像线程或协同程序这样的语言特性,而JavaScript没有。谢谢,它(大部分)是有效的。代码没有问题,只是在提交时添加了一个隐藏字段来检查php端,因为表单上有多个提交按钮,可以执行不同的操作。