Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript/jQuery等待变量true_Javascript_Jquery_Html_Ajax - Fatal编程技术网

Javascript/jQuery等待变量true

Javascript/jQuery等待变量true,javascript,jquery,html,ajax,Javascript,Jquery,Html,Ajax,我有以下设置: 一个文档可以有多个表单 当输入字段上的输入发生更改时,jQuery将触发ajax事件。然后调用input.data(“checking”,true) 当ajax事件完成时,调用input.data(“checking”,false) 现在我想制作一个自定义的表单提交,它等待此表单中的所有输入都打开输入。数据(“检查”)==true 到目前为止,我的代码没有问题: $(document).on("submit", "form", function(event) {

我有以下设置:

  • 一个文档可以有多个表单
  • 输入
    字段上的输入发生更改时,
    jQuery
    将触发
    ajax
    事件。然后调用
    input.data(“checking”,true)
  • ajax
    事件完成时,调用
    input.data(“checking”,false)
现在我想制作一个自定义的
表单
提交
,它等待此
表单
中的所有
输入
都打开
输入。数据(“检查”)==true

到目前为止,我的代码没有问题:

$(document).on("submit", "form", function(event) {


    event.target.checkValidity();
    event.preventDefault();
    event.stopPropagation();

    //TODO: prevent this when not everything is checked
    var dataSerialized = $(this).serialize();
    var service = $(this).attr("action");
    $.ajax({
        url: "services/" + service + ".php",
        data: dataSerialized,
        type: "POST",
        cache: false,
        success: function(html) {
            if (html == "1") {
                //TODO: load page from json callback
                //loadPage(onsuccess);
            }
            else {
                loadPage("error");
            }
        },
        error: function(html, message) {
            finalError(message);
        }
    });
});

如何使该函数等待(非阻塞!)直到所有的ajax事件完成?

假设创建一个函数
checkDone
,当
input.data(“checking”)==false
对于表单中的所有
input
时,该函数返回
true
,您可以执行以下操作:

$(document).on("submit", "form", function(event) {
    event.target.checkValidity();
    event.preventDefault();
    event.stopPropagation();

    var that = $(this);
    var interval = setInterval(function() {
        if(checkDone(that)) {
            clearInterval(interval);
            var dataSerialized = that.serialize();
            var service = that.attr("action");
            $.ajax({
                url: "services/" + service + ".php",
                data: dataSerialized,
                type: "POST",
                cache: false,
                success: function(html) {
                    if (html == "1") {
                        //TODO: load page from json callback
                        //loadPage(onsuccess);
                    }
                    else {
                        loadPage("error");
                    }
                },
                error: function(html, message) {
                    finalError(message);
                }
            });
        }
    }, 500);
});
通过这种方式,每0.5秒检查一次是否可以在验证所有输入后提交表单,如果可以,则清除间隔并提交表单


但是我建议不要在提交后删除标准服务器端验证。

这不能阻止浏览器,对吗?在现代浏览器中,一切都应该在独立的线程中运行。别担心,还有服务器端验证,这只是为了用户体验。这不会阻止浏览器,不会,但我还没有机会测试它。