Comment valider jQuery UI zone de liste déroulante de valeurs avec jQuery Validation Plugin?
J'ai ajouté de jQuery UI combobox avec la distance à la source de ma forme. Maintenant, je suis en train de valider avec jQuery Plugin de Validation (uniquement sur les valeurs de la liste sont autorisés, le champ est obligatoire).
J'ai essayé approche standard:
$("#myform").validate({
focusInvalid: false,
focusCleanup: true,
rules: {
cbCountry: { //combobox
required: true
}
Mais encore des valeurs vides sont autorisés. Ce que je fais mal?
Mise à jour: j'ai essayé de suivre @Mike_Laird les conseils ci-dessous et j'ai trouvé que ma méthode personnalisée
$.validator.addMethod('validComboboxValue', function (value) {
},
...
même pas appelé lorsqu'il est appliqué à l'INTERFACE utilisateur de jQuery zone de liste déroulante. Mais quand j'assigne la même méthode de saisie de texte standard, il est appelé.
- Est
cbCountry
le nom du sous-jacentselect
ou générésinput
? Pourriez-vous poster le code que vous travaillez avec? - cbCountry est le
select
. Voici un exemple de code - jsfiddle.net/and7ey/8kLbf (cbCity
est utilisé au lieu decbCountry
). Cependant, la validation ne fonctionne pas correctement pour moi à jsfiddle. - Les deux options de la
<select>
ont une valeur (0/1) donc je suppose que la règle requis est toujours passé, il n'est jamais null/vide. - mais en fait rien ne peut être choisi...
- Une raison quelconque, vous devez utiliser un
select
? Je sais que la zone de liste déroulante exemple utilise un seul, mais vous pouvez simplement utiliser unautocomplete
qui ressemble à une zone de liste déroulante. La validation peut être plus simple de cette façon. - oui, j'ai besoin de zone de liste déroulante utilisateur peut y choisir les plus populaires de valeurs (au lieu de taper une valeur dans le champ de saisie semi-automatique).
Vous devez vous connecter pour publier un commentaire.
validate.js les besoins de l' "nom" sur le tag, lorsque vous utilisez jqueryui de saisie semi-automatique zone de liste déroulante.
Le code généré ne pas avoir à la fois une
id
etname
attribut, de sorte qu'ils doivent être ajoutés si nécessaire.Dans le
_create
fonction de la zone de liste déroulante, vous devez ajouter:et:
Étant donné le HTML comme ceci:
La
autocomplete-combobox
va produire lesinput
élément avec laid
etname
attributsdropDownlist_combobox
avec ce que j'ai le plein contrôle sur ce type de format html de la balise de jqueryui-saisie semi-automatique-zone de liste déroulante
Vous pouvez ensuite appliquer les règles de validation de la
input
élément (dropDownlist-combobox
)Cela va ressembler à quelque chose comme:
et le tour est joué 🙂
À l'aide de cela, cependant, vous obtiendrez un problème avec le message d'erreur manifeste entre les
input
balise et la "liste déroulante" bouton. Pour corriger cela, vous aurez besoin d'un code supplémentaire:Tout le code de l'exemple est disponible à http://jsfiddle.net/XhU78/
J'espère travaille pour vous 🙂
L'idée de base est de définir des valeurs sur chaque sélectionnez options, puis d'écrire un validateur personnalisé méthode pour vérifier les valeurs de l'option. Quelque chose comme méthode personnalisée va faire une sélection à partir de l'sélectionnez le menu déroulant nécessaire.
Mettre class="selectComboboxCheck" dans la balise select pour déclencher cette méthode.
L'sélectionnez options devrait ressembler à quelque chose comme
Je vois deux problèmes ici. La première vous devez utiliser le nom de l'élément, pas d'identificateur. Deuxièmement: si je comprends bien, vous pensez que vous permettre vide
<select>
valeurs, mais ce n'est pas comme ça. Sélectionnez est rempli correctement après la saisie semi-automatique, mais lorsque vous transmettez une valeur vide dans<input id="acId">
(e.q. supprimer du contenu et appuyez sur ÉCHAP) le changement n'est pas propagée à<select>
qui contient du contenu assigné avant<input id="acId">
a été effacé.Longue histoire courte, vous devriez vérifier soit pas dans la sélection, mais créer automatiquement d'entrée, ou de propager en quelque sorte le vide de la valeur à sélectionner.
À l'aide de votre violon j'ai testé la première approche : http://jsfiddle.net/RRH6t/1/
Il suffit d'ajouter une nouvelle méthode personnalisée comme ce
et ajoutez créer la boîte de sélection comme ceci:
Maintenant, lorsque vous sélectionnez l'option "sélectionner quelque chose de" validation ne passera pas, et sinon il va.
(testé avec jquery 1.9.1)
Je sais que c'est un vieux sujet, mais j'ai juste eu à faire plus ou moins la même (mais avec une source statique). Le seul problème avec la vérification de l'sélectionnez la valeur que la Validation plugin filtre les éléments cachés, et la zone de liste déroulante code est idéalement caché l'original, sélectionnez. Cependant, rien ne nous empêche de dire le Validateur à examiner tous les éléments, même ceux qui sont cachés:
Ignorer est un sélecteur de filtre inutile éléments et par défaut est égale à
:hidden
. Vous pouvez tout aussi bien l'alimentation que dans un appel à$.validator.setDefaults()
et de le faire travailler pour n'importe quel programme de validation d'instance. Cela fonctionne au moment de soumettre le formulaire avec unrequired
et unmin
attributs, peut-être quelques efforts supplémentaires seront nécessaires pour ce travail sur la sélection (comme le déclenchement d'unefocusout
événement).Mise à JOUR
À obtenir pour valider également sur l'évolution de la valeur au lieu de seulement sur le formulaire de soumission est un peu plus compliqué, mais est le suivant:
required
attribut est nécessaire, pas lemin
un.focusout
événement de changement d'état (autocompleteselect
,_removeIfInvalid
).