jquery验证问题

时间:2010-03-26 09:37:52

标签: jquery asp.net-mvc jquery-validate

自定义验证输入我写了一个脚本:

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验证

,提交仍然有效

什么不在这里?

1 个答案:

答案 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;
}