2010-04-27 5 views
1

J'ai plusieurs choix, et je dois forcer l'utilisateur à choisir deux options maximum, rien de plus.Validation personnalisée sur jquery valider le plugin, besoin de compter l'élément dans une sélection multiple

J'essaie ceci:

jQuery.validator.addMethod("morethantwo", 
    function(value, element) { 

     var foo = []; 
     $(element+' :selected').each(function(i, selected){ 
      foo[i] = $(selected).text(); 
      alert(foo[i]); 
     }); 
     return true; 

    },"Max two options." 
); 

Le problème est que je reçois:

uncaught exception: Syntax error, unrecognized expression: [object HTMLSelectElement] 
erreur

. Tandis que si je fais ceci:

Cela fonctionne mais j'obtiens toutes les options dans la sélection. Pourquoi donc? Est-ce la bonne route pour marcher? Y a-t-il de meilleurs moyens de faire ce genre de vérification?

Merci beaucoup!

Répondre

2

Pour répondre à la raison pour laquelle il est rupture, element est un élément DOM, pas une chaîne, donc dans ce code que vous essayez de faire DOMElement+string ... qui ne fonctionne pas :) envelopper lieu l'élément DOM et utiliser .find() ou .children() pour obtenir les options.

Savoir pourquoi il a cassé, vous pouvez écrire votre règle comme celui-ci pour vérifier les options sélectionnées:

jQuery.validator.addMethod("maxtwo", function(value, element) { 
    return $(element).find(":selected").length <= 2; 
},"Max two options."); 

Check here for a demo of the above code

Si vous êtes strictement traitant d'un <select multiple>, vous pouvez le faire aussi bien:

return $(element).val().length <= 2; 

Depuis .val() renvoie un tableau dans ce cas.

Questions connexes