Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.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
jQuery关于提交验证,最后是模态对话框?_Jquery_Validation_Dialog_Modal Dialog_Jquery Ui Dialog - Fatal编程技术网

jQuery关于提交验证,最后是模态对话框?

jQuery关于提交验证,最后是模态对话框?,jquery,validation,dialog,modal-dialog,jquery-ui-dialog,Jquery,Validation,Dialog,Modal Dialog,Jquery Ui Dialog,我现在有一个表单要验证,假设一切都是正确的,我希望它弹出一个对话框,确认它们的详细信息,下面是我到目前为止的代码示例: var userConfirmed = false; $("#dialog").dialog({ buttons: { "Yes": function() { userConfirmed = true; $("#inputform").submit(); }, "No, I

我现在有一个表单要验证,假设一切都是正确的,我希望它弹出一个对话框,确认它们的详细信息,下面是我到目前为止的代码示例:

var userConfirmed = false;

$("#dialog").dialog({
    buttons: {
        "Yes": function() {
            userConfirmed = true;
            $("#inputform").submit();
        },
        "No, I'll change them.": function() {
            $(this).dialog("close");
        }
    }
});

// check they've submitted what they need to
$("form").submit(function() {

    // lots of these
    if (something) {
        return false;
    }

    $("#dialog").dialog("open");

    return userConfirmed;

});
初始验证工作正常-它根据标准进行检查并标记为appropiate,如果没有满足任何标准,它将按照我的需要显示模式框。到目前为止,一切顺利

但问题是,当我按“是”提交表单时,它不会提交,直到您再次按实际的“提交”按钮,啊!任何使用jQuery提交论坛的调用都会失败


欢迎提出任何建议,谢谢。

我会将活动附加到按钮上,而不是表单上。只需将其附加到“提交”按钮,然后单击。然后,您可以使用
event.preventDefault()
在对话框确认之前阻止表单提交。在'Yes'函数中,只需放入
$('form').submit()
。也不必担心这样的返回值。

对话框打开并不会停止代码的执行
valToReturn
$(“表单”)返回。在设置之前提交()

你可以这样做:

//Save the default behavior to break any loops
var defaultSubmit = $.extend(true, {}, $("form").submit);

$("form").submit(function(e) {

    var valToReturn = true;

    // lots of these
    if (something) {
        return false;
    }

    // popup the dialog confirmation
    $("#dialog").dialog({
        buttons: {
            "Ok": function() {
                $(this).dialog("close");
                defaultSubmit(); // User confirmed, submit form.
            },
            "Cancel": function() {
                $(this).dialog("close"); // Form already prevented from submitting. Exit quietly.
            }
        }
    });

    $("#dialog").dialog("open");

    return false; // Prevent form from being submitted

});

在某个地方添加一个标志,告知对话框是否已经出现,然后用户单击“是”。例如:

var userConfirmed = false;
$("form").submit(function(e) {
    if ( userConfirmed ) {
        userConfirmed = false; // Reset it to false
        return true; // No need to validate anything, that was already done last time
    }
    var form = $(this);
    // ...
        "Yes": function() {
            userConfirmed = true; // Confirm that the dialog was shown and the user clicked "Yes"
            $(this).dialog("close");
            form.submit(); // Try again; this time, the validation was already done
        },
    // ...
    return false; // Don't submit; the user haven't confirmed the info on the dialog
});
如果没有该标志,您将处于鸡和蛋的情况:提交打开对话框,而调用
$(“表单”)的对话框。submit()
再次打开对话框

如果您有许多表单,并且不想使用“全局”var,那么您可以出于同样的目的使用
数据


更新:现场示例。在Chrome和Firefox中测试成功(提交后3秒将显示一个空白页)。

一如既往,我建议使用验证代码,代码如下所示

$("#formid").validate({
    submitHandler: function(form) {
               $("#dialog").dialog({
     buttons: {
         "Ok": function() {
             form.submit();
             $(this).dialog("close");
         },
         "Cancel": function() {
             $(this).dialog("close");
         }
     }
});
    }
});

啊!感谢您的更新:)这是一个好主意,我在发布之前尝试了它,但不幸的是,它会导致不断尝试调用表单的无限循环。提交函数尝试将现有的
$(“表单”)。提交()将
保存为变量,然后使用jQuery更改功能。在OK函数中,您可以调用保存的版本,表单将正常处理。感谢更新,不幸的是,它仍然会导致无限循环。我喜欢保存最后一个处理程序的一般想法,但这段代码真的能做到吗?据我所知,它将在var中保存
$.fn.submit
,然后在没有任何
的情况下调用它,我认为这根本不起作用。即使使用
$.proxy
将其绑定到正确的元素,它仍然是相同的函数,因此会再次调用自定义处理程序。是的,不幸的是,按“确定”按钮上的defaultSubmit()函数调用似乎只是再次运行提交函数,弹出对话框:我已经更新了我的初始帖子,感觉进展很顺利,但是我确实考虑了这个问题,但是当用户仅仅通过点击Enter键提交一个表单会让它很尴尬。这是个好主意,谢谢。我主要关心的是如果对话框被呈现给用户,他们编辑他们的数据,它就不会再出现最后的P了。我知道这听起来很糟糕,但不幸的是,这是一个要求:$Damn,忽略我-抱歉,我刚刚意识到只有当用户单击yes时才设置DialogAsped标志。:-)你的意思是,如果用户选择“Cancel”?这样,
DialogAsped
就不会设置为true(请注意,只有“yes”选项)按钮设置)。也许我应该为该变量使用更好的名称…[完成]这太奇怪了……不幸的是,我帮不了你。但是remibreton+PCasagrande的更新答案看起来很有希望,我想说比我的答案更干净,你可以试试,而不是在添加了一个实例,效果很好。我敢打赌,你的“是”中出现了一些例外您没有注意到的按钮,这就是为什么它只在再次单击按钮后才起作用(此时变量仍然为真)非常感谢,如果可能的话,我想避免使用外部插件,但看起来我可能应该检查一下这个插件。值得注意的是,这个插件是由jQuery团队的一名成员构建的,广泛用于验证表单,并将为您节省大量编写代码的时间。刚刚尝试实现这个插件,它非常好(谢谢)但它与目前整个站点产生错误的方式(使用jGrowl调用并关注有错误的元素)极不一致,因此需要花费大量时间来实现:(不过谢谢你,这是一个很好的建议。除此之外,我已尝试剥离所有代码--仍然没有乐趣。。。