我正在使用MVC3和不引人注意的验证。在某些情况下,即使表格不完整,我也要提交表格,前提是选择了两个字段。我使用的JavaScript如下:
$('#form_section11').submit(function () {
//event.preventDefault(); //stops form from submitting immediately
var validatorSection11 = $('#form_section11').validate();
if (!$(this).valid()) {
// or family name and date of birth
var FamilyNameExists = true;
var DateOfBirthExists = true;
if (validatorSection11.errorMap["FamilyName"]) { FamilyNameExists = false; }
if (validatorSection11.errorMap["DateOfBirth"]) { DateOfBirthExists = false; }
// show the partial save rules
$('#ParitalSaveIntructions').show();
// show the partial save checkbox
if (FamilyNameExists && DateOfBirthExists) {
$("#AgreePartialSave").show();
if ($("#PartialSave").is(':checked')) {
// partial save has been requested
return true; //// <- save not happening, INCORRECT action
}
// clear perinatalWomanView_PartialSave
$("#PartialSave").removeAttr('checked');
}
return false; // <- save not happening, correct action
}
return true; // <- save happens, correct action
});
向用户显示一个复选框以确认提交不完整。我已经指出了JavaScript的工作原理以及失败的地方。
我还添加了
var validatorSection11 = $('#form_section11').validate(
{
onsubmit: false
}
);
这没有效果。我的问题是:
为什么原始return true
无效?
我正确使用onsubmit: false
吗?
有没有更好的方法呢?
提前致谢。
答案 0 :(得分:1)
尝试使用变量(save
)而不是多个return语句:
$('#form_section11').submit(function (e) {
'use strict';
var self = $(this),
save = false,
FamilyNameExists = true,
DateOfBirthExists = true,
validatorSection11 = self.validate();
if (!self.valid()) {
// or family name and date of birth
FamilyNameExists = true;
DateOfBirthExists = true;
if (validatorSection11.errorMap["FamilyName"]) {
FamilyNameExists = false;
}
if (validatorSection11.errorMap["DateOfBirth"]) {
DateOfBirthExists = false;
}
// show the partial save rules
$('#ParitalSaveIntructions').show(); // should this be "Parital" or "Partial"
// show the partial save checkbox
if (FamilyNameExists && DateOfBirthExists) {
$("#AgreePartialSave").show();
//if ($("#PartialSave").is(':checked')) { // Comment in answer
// // partial save has been requested
// save = true;
//}
save = $("#PartialSave").is(':checked');
// clear perinatalWomanView_PartialSave
$("#PartialSave").removeAttr('checked');
}
//save = false; //This was overriding the `save = true` above.
}
if (!save) {
e.preventDefault(); // stops form from submitting immediately
}
return save;
});
此外,在“回答评论”部分,此部分可能只会在重新提交表单后执行,因为必须执行以下操作:
$("#AgreePartialSave").show();
必须执行并显示该部分。$("#PartialSave")
才能返回$("#PartialSave").is(':checked')
。true
必须再次触发要评估的处理程序部分。如果用户必须单击以执行部分保存的其他按钮,您可能希望将整个部分移动到该按钮处理程序中。