2010-03-26 8 views
0

pour valider une entrée personnalisée j'ai écrit un script:problèmes de validation 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" 
      } 
     }); 
    } 

EDIT: la règle requise fonctionne très bien, mais ma méthode de validation ne dispalt pas le message.
et le soumettre fonctionne même si les données des éléments n'ont pas passé la validation cardNumberCheck

quoi de pas ici?

Répondre

1

Cette partie:

$.get("/CaseHistories/ValidateCardNumber", 
    { caseHistoryId: $('#CaseHistory_Id').val(), 
    cardNumber: $('#CaseHistory_CardNumber').val() }, 
    function(data) { res = data }); 
    //alert(res) => works fine return true/false 
    return res; 
} 

est asynchrone, il revient non défini parce que la fonction de la réussite ne fonctionne que plus tard, lorsque le serveur répond avec des données (peu importe la vitesse, il est après votre JavaScript ACCÈDE pour sûr). Il alerte bien parce que l'alerte arrive plus tard, car elle est déclenchée quand les données reviennent ... après l'exécution du code de validation. Pour faire un callback synchrone, vous devez le faire à la place:

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

Je l'ai fait synchrone comme vous triste. mais le message de validation ne s'affiche toujours pas. Qu'est-ce qui ne va pas avec? avoir des indices? – CoffeeCode

+0

et le il soumettent encore des données même si le cardNumberCheck renvoient vrai ou faux – CoffeeCode

+0

@CoffeeCode - Si vous remplacez 'return res;' par 'alert (res); return res; 'alerte-t-il vrai, faux ou indéfini? –