2010-03-26 130 views
0

定制验证输入我写了一个脚本:jQuery验证问题

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" 
      } 
     }); 
    } 

编辑: 所需的规则工作正常,但我的验证方法不dispalt消息。
即使元素数据没有通过cardNumberCheck验证,也可以正常提交

什么不是在这里?

回答

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; 
} 
+0

我做到了同步,因为你伤心。但验证消息仍然不显示。 它有什么不对?有什么线索? – CoffeeCode 2010-03-26 10:48:19

+0

并且它仍然提交数据,即使cardNumberCheck返回true或false – CoffeeCode 2010-03-26 10:50:37

+0

@CoffeeCode - 如果你确实用'alert(res)替换'return res;';返回res;'它会提示true,false还是undefined? – 2010-03-26 11:18:05