Moyen simple rapide de sélectionner un ensemble de "optgroup" dans la boîte de sélection
J'ai une zone de liste dans laquelle je peux sélectionner plusieurs options. Dans la boîte de sélection sont multiples optgroups.
Est-il un moyen facile de sélectionner un ensemble de "optgroup" à la fois en javascript?
Vous devez vous connecter pour publier un commentaire.
Je suggère l'utilisation de jQuery (ou un autre framework) afin de traiter rapidement les DOM sélections. Donner à chaque "optgroup" une classe pour le rendre plus facile à saisir.
Si vous souhaitez sélectionner l'ensemble du groupe sur la base de l'utilisateur en sélectionnant le groupe, procédez de la manière suivante:
**Les deux exemples ne sont pas testés pseudo-code, mais ils devraient travailler avec un minimum de modifications, si nécessaire.
Si vous ne pouvez pas utiliser un framework, vous devrez traverser le DOM vous-même pour trouver la "optgroup" et des enfants. Vous pouvez attacher un écouteur à l'
select
élément de saisir l'élément sélectionné, puis traverse les enfants de cette façon, aussi.document.getElementById('selectElementID')
vous sélectionnez l'élément lui-même. Ensuite, c'est juste une question de parcours de ses enfants ou vous pouvez ajouter un écouteur d'événement pour capturer l'événement select et d'analyser si c'est votre choix "optgroup". Si oui, alors vous traverserait la "optgroup" les enfants et les sélectionner en tant que bien..prop()
au lieu.attr()
dans ce cas.Je suis généralement contre l'utilisation de jQuery pour des travaux simples comme ça, mais je peux voir sa valeur ici. Encore, si vous préférez un non-jQuery solution qui vous permettra d'avoir les avantages de l'utilisation de pas de bibliothèque, présentant aucun parasites de l'ids ou les classes et en cours d'exécution plus rapide, voici un:
Si votre
<optgroup>
a un id, vous pourriez finir avec laselectOptGroup
fonction et vient de passer le de "optgroup" droit dansselectOptGroupOptions
.jquery:
J'ai essayé de faire la même chose tout à l'heure.
J'ai voulu choisir un
<optgroup>
's<option>
s en cliquant sur le groupe de l'étiquette. La première tentative s'est déroulée comme suit:Cette solution de la moitié ont travaillé...
En cliquant sur le
<optgroup>
s'étiquette de tous ses enfants sont devenus sélectionné.MAIS quand simplement en cliquant sur un
<option>
il était encore en sélectionnant toutes les autres<option>
s dans le groupe! Le problème était de remontée d'événements, parce que l'<option>
est à l'intérieur de la<optgroup>
techniquement, vous êtes en cliquant trop.Donc la dernière pièce du puzzle était de réprimer la remontée d'événements à la hausse dans le cas où un
<option>
a été effectivement cliqué sur place. La solution finale est alors devenu:Travail!
MODIFIER
Infuriatingly cela ne fonctionne pas travailler dans IE8 (et douteux < IE8 - peut-être IE9?)...
Il décide d'ignorer totalement les événements click sur deux éléments. La seule alternative que je peux penser à est de positionner les éléments au-dessus de la "optgroup" étiquettes pour capturer les souris, mais c'est probablement pas la valeur de l'effort...