À l'aide de JQuery Valider Plugin pour valider plusieurs champs de formulaire avec des noms identiques
J'ai généré dynamiquement, un formulaire avec des champs de saisie avec le même nom (par exemple: "la carte"). Je n'ai pas la possibilité de changer les noms de champ ou de la génération de champ unique des noms, parce que le gestionnaire de formulaire code (Perl/CGI) est conçu pour gérer un tableau de valeurs d'entrée (dans ce cas @map
).
Comment puis-je utiliser le JQuery Valider Plugin pour valider un formulaire dans une telle situation? Plus précisément je voudrais exactement un élément du tableau pour avoir une certaine valeur fixe. Je suis actuellement en utilisant un gestionnaire d'événements personnalisés qui crée un objet JSON avec serializeArray()
et puis traverse pour s'assurer que la condition est remplie. Mais depuis que j'ai utilisé de la validation de Plugin dans le reste de l'application, je me demandais si un tel cas peut être traité en utilisant la même plugin ici aussi.
Vous remercie de votre attention.
- Il serait tellement plus facile pour vous apporter une réponse si tu as posté un peu de code avec votre question.
- Désolé, je devrais avoir. Voici quelques représentant de code. Dans mon application, le formulaire est généré dynamiquement à partir d'un modèle. Le formulaire HTML a les champs suivants: <input type=text name="map" /> <input type=text name="map" /> .... <input type=text name="map" /> je veux vérifier qu'au moins un des champs contient la valeur (dire) "e-mail", j'ai découvert après l'affichage ici que ce n'est pas possible à l'aide de la validation de Plugin. Voir le plugin auteurs mail ici: tr.im/n0lQ Comme l'auteur suggère que vous pouvez faire cela pour les cases à cocher et des boutons radio
- vous devriez envisager de la réponse "scampbell", il travaille et très simple.
Vous devez vous connecter pour publier un commentaire.
J'ai passé quelque temps à chercher et à essayer des choses différentes quand enfin j'ai essayé le plus trivial façon de faire de la validation sur plusieurs champs. Chaque champ et c'est des clones de partager une classe unique à chaque jeu. Je viens d'en boucle à travers les entrées avec la classe et ajouté mes règles de validation, comme d'habitude. J'espère que cela peut aider quelqu'un d'autre.
$("#registration").validate().element(this);
pour que. Voir commentaire pour plus de détails sur la façon dont cela peut être fait par la définition de toutes les règles de validation dans un endroit et à appliquer seulement sur soumettre.Que je ne peux pas commenter sur @scampbell réponse, je ne sais pas si il est sur le points de réputation ou parce que le fil vient de fermer ses portes, j'ai une contribution à sa réponse,
Au lieu de changer le fichier de source de jquery.la validation, vous pouvez simplement remplacer la fonction vous avez besoin de modifier uniquement dans les pages qui en a besoin.
un exemple serait:
cela pourrait ne pas être la meilleure solution, mais au moins cela évite d'éditer les fichiers source qui pourrait être remplacée plus tard, quand une nouvelle version de presse. où votre remplacé fonction pourrait ou ne pourrait pas briser
Vieux thread, je sais, mais je suis venu à travers elle, à la recherche d'une solution au même problème.
Une solution plus élégante a été posté ici:
http://web-funda.blogspot.com/2009/05/jquery-validation-for-array-of-input.html
Il vous suffit de modifier jquery.validate.js et changer le checkForm à
J'ai juste appris à partir d'un mail par les Plugins auteur, Jörn Zaefferer, que la validation nécessite des noms de champs à être unique, sauf pour les boutons radio et les cases à cocher.
Jason réponse fera l'affaire, mais je ne voulais pas ajouter des événements de clic sur chaque formulaire je l'ai fait sur.
Dans mon cas, j'ai le plugin de validation envisager des noms se terminant par '[]' différentes, même si elles peuvent être identiques fieldnames. Pour ce faire, j'ai a remplacé ces deux méthodes internes après jquery.validate.js les charges.
Simplement utiliser une partie inutilisée de l'attribut de l'entrée pour stocker le nom d'origine, puis il suffit de le renommer avec l'index ci-jointe:
}
}
Puis après avoir défini votre programme de validation:
et quand vous l'avez fini, de la validation, de revenir de la sorte:
--
Espérons que cette aide!
Voici comment je l'ai fait. Un peu plus facile qu'auparavant méthodes proposées:
Dans mon cas, j'ai un assistant (3 étapes) qui s'est avéré être encore plus complexe que je ne veux pas valider tous les champs à la fois. En gros, j'ai placer des composants dans des onglets et si le premier onglet est valide, je passe à la suivante, jusqu'à ce que j'arrive à la dernière, après laquelle je soumettre toutes les données. Ainsi, le
tab
paramètre, il est l'onglet de l'élément (qui est undiv
). J'ai ensuite une boucle sur tous les éléments d'entrée des enfants à mon onglet et vérifier leur validité.Tout le reste est standard.
Juste pour être complet, voici le reste du code: la façon dont le formulaire de soumission est fait et comment mon validateur ressemble:
Et voici le js fonction appelée:
Je suis en utilisant ces règles de validation (que j'ai créer sur JQuery.prêt):
Je suis à l'aide de "jQuery validation plug-in 1.7".
Le problème, pourquoi plusieurs "$(:input)" éléments partageant le même nom ne sont pas validés
est l' $.programme de validation.la méthode des éléments:
La condition
si ( ce.nom dans rulesCache ||.....
évalue pour la deuxième et la prochaine éléments qui partagent le même nom vrai....
La solution serait d'avoir la condition:
(ce.id || ce.nom) dans rulesCache
Excusez-moi, JS puritains, que (ce.id || ce.nom) n'est pas à 100%...
Bien sûr, la
rulesCache[cette.nom] = true;
ligne doit être modifié en conséquence en tant que bien.
De sorte que le $.programme de validation.le prototype.les éléments de la méthode:
});
Peut-être que je suis à côté de la question, mais depuis que le validateur ne fonctionne pas avec plusieurs noms (essayé... raté!) J'ai changé mon formulaire pour modifier dynamiquement les noms, définir les règles, puis annuler les noms sur "soumettre".
Deux méthodes (ignorer le wlog trucs, c'est juste sorties de la console):
Sur le formulaire de charge, et à chaque fois que je dynamiquement ajouter une autre ligne, j'appelle l'ensemble de la méthode, par exemple
Cela change les noms afin de permettre la validation.
Dans le submitHandler: thingumy après validation j'appelle le revert, c'est à dire
Qui passe les noms en arrière à l'original avant la publication des données.
Je pense que vous avez mal compris le fonctionnement des formulaires HTML. Chaque élément de formulaire doit avoir un nom unique, à l'exception de plusieurs cases à cocher et des boutons qui vous permettent de choisir une ou plusieurs options pour un champ de données.
Dans votre cas, non seulement JQuery de validation, mais aussi côté serveur validateur de formulaire serait un échec, car il ne peut pas affecter les entrées pour les champs de données. Imaginons que vous voulez à l'utilisateur d'entrer prename, nom, e-mail-adresse, fax (en option) et de tous vos champs de saisie ont
name="map"
Ensuite vous recevrez ces listes sur soumettre:
Vous voyez qu'il est impossible de valider ce formulaire de manière fiable.
Je recommande de revoir la documentation de votre perl gestionnaire de formulaire ou de l'adapter si vous avez écrit sur votre propre.
Pour moi, cela a été résolu très facilement en désactivant le débogage
Il existe une solution simple: