2010-07-12 3 views
0

Ok, donc j'ai écrit cette fonction pour être un événement de changement appliqué à une case à cocher. Maintenant, il est évident que je dois l'utiliser comme une méthode de validation personnalisée, de sorte qu'il s'exécute lorsque vous cliquez sur "Suivant" pour parcourir le formulaire. J'ai tout ce travail, je ne peux pas obtenir la bonne syntaxe de la règle.Besoin d'aide avec jQuery valider addMethod

Ici, il est un événement de changement:

$('#MKDPT').change(function() { 
if ($('#MKDPT').is(':checked')) { 
    var checked = false; 
    var ckd = ['AMX1N','BMFNP','BMFNB','CFE1N','CBEXR','CBT1','CBTQL','CME1','CMEQL','CMX1','DCMX1','DMERT','DMEDL','ERX1N','ERXXN','EXC1N','EXD1N','EXR1N','EXI1N','IPE1','KCB1','LME1','DLME1','MPL1','NDQ1N','NDQL2','CEC1','ICEFI','NYM1','DNYM1','NYMQL','NYS1N','NYSLM','PNK1P','PNK2N','SMX1','CNC1N','CNS1N','MTL1N','MTL2N','WEA1']; 
    $('#' + ckd.join(',#')).each(function() { // Select all these IDs 
     if (this.checked) { // Is this one checked? 
      checked = true; 
     } 
     return !checked; // Exit if any are checked 
    }); 
    if (!checked) { // None are checked 
     MKDPTAlert1(); 
    } 
}  
}); 

Et ma tentative d'une règle de validation personnalisée:

$.validator.addMethod(
    "MKDPTOnly", 
    function(value, element, params) { 
    var checked = false; 
    var ckd = ['AMX1N','BMFNP','BMFNB','CFE1N','CBEXR','CBT1','CBTQL','CME1','CMEQL','CMX1','DCMX1','DMERT','DMEDL','ERX1N','ERXXN','EXC1N','EXD1N','EXR1N','EXI1N','IPE1','KCB1','LME1','DLME1','MPL1','NDQ1N','NDQL2','CEC1','ICEFI','NYM1','DNYM1','NYMQL','NYS1N','NYSLM','PNK1P','PNK2N','SMX1','CNC1N','CNS1N','MTL1N','MTL2N','WEA1'];$('#' + ckd.join(',#')).each(function() { // Select all these IDs 
     if (this.checked) { // Is this one checked? 
      checked = true; 
     } 
     return !checked; // Exit if any are checked 
    }); 
    if (!checked) { // None are checked 

    } 
}, Alert("foo"); 
); 

Comme vous pouvez le voir, il est cassé. Je voudrais que cela affiche comme une alerte, pas le placement d'erreur standard. Ai-je besoin d'utiliser la variable "ckd" comme paramètre? Je ne suis pas vraiment clair sur la façon dont ceux qui travaillent, mais les ont déjà utilisés avec beaucoup d'aide.

Merci!

Répondre

0

est ici une méthode alternative qui devrait faire l'affaire:

$('#myForm').validate({ 
    rules:{ 
    MKDPT: { 
     required: { 
     depends: function(element){ 
      return $('.others:checked').length; 
     } 
     } 
    } 
    }, 
    messages:{ 
    MKDPT: 'foo' 
    } 
}); 

Notez que cela suppose que vous avez attribué votre collection d'autres cases à cocher la classe others.

+0

Donc, je n'ai pas besoin de faire les étapes avec addMethod? il suffit d'ajouter la classe aux cases à cocher et d'utiliser "depends: ...." sur la règle? Cela semble bon d'être vrai! –

+0

Devrait être aussi simple que ça! – Ryley

+0

N'a pas l'air de faire quoi que ce soit. est le retour basé sur la longueur> 0? Si je n'avais pas de case avec la classe "others" cochée et que MKDPT était coché, il devrait retourner l'erreur. –