自定义验证输入我写了一个脚本:
function cardNumberCheck(value, element) {
var res = false;
$.get("/CaseHistories/ValidateCardNumber",
{ caseHistoryId: $('#CaseHistory_Id').val(), cardNumber: $('#CaseHistory_CardNumber').val() },
function(data) { res = data });
//alert(res) => works fine return true/false
return res;
}
$.validator.addMethod("cardValidate",
cardNumberCheck, "invalid");
if ($('#CaseHistory_CardNumber').is("form *")) { //<= check if elem is in a form
$('#CaseHistory_CardNumber').rules("add", {
required: true,
cardValidate: true,
messages: {
required: "*",
cardValidate: "invalid"
}
});
}
修改:
所需规则正常,但我的验证方法不会对消息进行处理。
即使元素数据没有通过cardNumberCheck验证
什么不在这里?
答案 0 :(得分:1)
这部分:
$.get("/CaseHistories/ValidateCardNumber",
{ caseHistoryId: $('#CaseHistory_Id').val(),
cardNumber: $('#CaseHistory_CardNumber').val() },
function(data) { res = data });
//alert(res) => works fine return true/false
return res;
}
是异步的,它返回undefined,因为成功函数直到稍后才运行,当服务器响应数据时(无论多快,它都在你的JavaScript移动之后肯定)。它会发出警报,因为警报实际上会在以后发生,因为它会在数据恢复后触发......在验证代码运行之后。要进行同步回调,您需要改为:
function cardNumberCheck(value, element) {
var res;
$.ajax({
async: false,
url: "/CaseHistories/ValidateCardNumber",
data: { caseHistoryId: $('#CaseHistory_Id').val(),
cardNumber: $('#CaseHistory_CardNumber').val() },
success: function(data) { res = data });
}
return res;
}