2010-08-15 2 views
9

J'ai un formulaire dont le champ "Adresse de facturation est-ce que votre adresse de livraison". Si l'utilisateur clique sur le bouton radio "Non", l'adresse cachée ul # billingAddress est affichée. Les champs contenus dans ul # billingAddress sont obligatoires s'ils sont visibles, c'est-à-dire si ul a display: block.jQuery validate plug in - validation des éléments masqués uniquement lorsqu'ils sont visibles

Comment écrire un addMethod personnalisé pour jquery validate.js qui ne l'exige que si le champ est visible? C'est ce que j'ai qui ne fonctionne pas.

$.validator.addMethod ("BillingSameAsShipping", function(value, element) { 
    var billingFields = ['billingAddress1','billingAddress2','billingCity','billingState','bilingZip'] 
    if ($("#billingAddress").is('visible') && billingFields.val('') { 
     return false; 
    } else 
     return true; 
}, "Please fill in the required billing information"); 

Ceci, de toute évidence, est vérin. Je dois le faire fonctionner pour chacun qui est dans le var.

Merci!

+0

Avez-vous essayé de les rendre non seulement invisibles, mais aussi de les mettre hors service? C'est juste une supposition, mais puisque les champs de formulaire désactivés ne seraient pas transmis de toute façon, je m'attendrais à ce qu'aucune validation ne se produise sur eux. – Tomalak

+0

Je ne devrais pas avoir à les désactiver, je veux juste qu'ils ne valident que lorsqu'ils sont visibles. À moins de les rendre handicapés est-il plus facile? –

+0

Je veux dire les rendre invisibles * et * désactivés. Avec jQuery, c'est assez facile. – Tomalak

Répondre

19

Le problème avec le contrôle visible est cette partie: .is('visible') il doit être: .is(':visible') pour utiliser le :visible selector.


Comme alternative, vous pouvez utiliser le ignore option pour faire ce que vous voulez un peu plus facile, comme ceci:

$("#myForm").validate({ 
    //other options 
    ignore: ':hidden' 
}); 

Cette approche vous permet d'utiliser la norme des règles nécessaires si vous voulez.

+0

Impressionnant comme toujours Nick. Thx homme! –

Questions connexes