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调用并关注有错误的元素)极不一致,因此需要花费大量时间来实现:(不过谢谢你,这是一个很好的建议。除此之外,我已尝试剥离所有代码--仍然没有乐趣。。。