Comment éviter le besoin de ctrl-clic dans un multi-sélectionner la zone à l'aide de Javascript?
Je pensais que ce serait un simple hack, mais j'ai été à la recherche pour les heures et ne peut pas vu à trouver le bon terme de recherche. Je veux avoir un ordinaire de multiples sélectionnez zone (<select multiple="multiple">
) sauf que je ne veux pas l'utilisateur d'avoir à maintenir la touche ctrl enfoncée pour faire des sélections multiples.
En d'autres termes, je veux un clic gauche pour faire basculer le <option>
élément qui se trouve sous le curseur, sans changer les autres. En d'autres mots, je veux quelque chose qui ressemble à une zone de liste déroulante zone de liste, mais se comporte comme un groupe de cases à cocher.
Quelqu'un peut-il suggérer une façon simple de le faire en Javascript? Merci.
- Si vous n'avez pas l'esprit de changer votre balisage, vous pouvez créer une liste de cases à cocher & étiquettes, puis masquer la case à cocher, et le style de l'étiquette lorsqu'elle est entrée est cochée) d'avoir la même apparence visuelle à
<select multiple>
. Démo en violon
Vous devez vous connecter pour publier un commentaire.
Vérifier ce violon: http://jsfiddle.net/xQqbR/1022/
Vous avez besoin de remplacer le
mousedown
événement pour chaque<option>
et de basculer laselected
bien là.Pour des raisons de simplicité, j'ai donné "option" que le sélecteur ci-dessus. Vous pouvez l'affiner pour correspondre à
<option>s
sous certaines<select>
élément(s). Ex:$('#mymultiselect option')
! this.selected
là.this.selected
au lieu de$(this).prop('selected')
.<script>
balises dans l'en-tête? Parce que j'ai fait et et je suis encore en train de la norme de comportement de la part de ma zone de liste. Ou est-ce la dépend de jQuery?$(document).ready(...)
this.selected = !this.selected;
Il n'y a vraiment pas besoin d'utiliser jQuery<select multiple >
comportement comme celui-ci. Pour la croix-prise en charge du navigateur, vous pourriez être mieux de la construction d'un contrôle personnalisé avec une liste de style de cases à cocher.Eu à résoudre ce problème moi-même remarqué que la buggé comportement d'un simple interception de l'
mousedown
et de la définition de l'attribut aurait, alors faites un remplacement de l'élément select et il fonctionne bien.jsFiddle: http://jsfiddle.net/51p7ocLw/
Remarque: Ce code résout buggy comportement en remplaçant le sélectionner l'élément dans le DOM. C'est un peu agressif et va casser des gestionnaires d'événement que vous pourriez avoir attaché à l'élément.
JS:
HTML:
e.preventDefault()
). Juste quelque chose à avoir à l'esprit.e.preventDefault()
faire?techfoobar la réponse est buggé, il désélectionne toutes les options si vous faites glisser la souris.
Sergio réponse est intéressante, mais le clonage et suppression d'événements liés à une liste déroulante n'est pas une bonne chose.
Essayez cette réponse.
Remarque: Ne fonctionne pas sur Firefox, mais fonctionne parfaitement sur Safari/Chrome/Opera. (Je n'ai pas le tester sur IE)
Necromancing.
La réponse sélectionnée sans jQuery.
Aussi, il a raté le réglage de la mise au point lorsque l'option est cliqué, parce que vous avez à faire vous-même, si vous écrivez e.preventDefault...
L'oubli de l'accent aurait une incidence sur CSS-style, par exemple, bootstrap, etc.
J'ai eu le même problème aujourd'hui, de façon générale, il est conseillé d'utiliser une liste de cases à cocher masqué et imiter le comportement via css, de cette façon est plus facile à gérer, mais dans mon cas, je ne veux pas modifier le code html.
Pour le moment j'ai testé ce code uniquement avec google chrome, je ne sais pas si collabore avec d'autres navigateur, mais il devrait:
Bien sûr, les suggestions sont les bienvenues, mais je n'ai pas trouvé un autre moyen