Comment pouvez-vous dire par programmation à un code HTML select
de se dérouler (par exemple, en raison d'un survol de la souris)?
javascript
html
Corey Trager
la source
la source
<select>
, car les gens s'attendent à ce qu'il se comporte d'une certaine manière et vous empêcherez les personnes sur d'autres plates-formes (comme les mobiles) d'utiliser votre site.Réponses:
Vous ne pouvez pas faire cela avec une balise de sélection HTML, mais vous pouvez le faire avec JavaScript et HTML. Il existe une variété de contrôles existants qui font cela - par exemple, la liste "suggérer" attachée à l'entrée SO "balise intéressante / ignorée", ou la recherche des adresses e-mail par Gmail.
Il existe de nombreux contrôles JavaScript + HTML qui offrent cette fonctionnalité - recherchez des contrôles de saisie semi-automatique pour des idées.
Voir ce lien pour le contrôle de saisie semi-automatique ... http://ajaxcontroltoolkit.codeplex.com/
la source
Cela était en fait possible avec HTML + Javascript, bien que partout ailleurs les gens disent que ce n'est pas le cas, mais cela a été obsolète plus tard et ne fonctionne plus maintenant.
Cependant, cela ne fonctionnait que dans Chrome. En savoir plus si vous êtes intéressé.
Selon le projet de travail du W3C pour HTML5, section 3.2.5.1.7. Contenu interactif :
<select>
étant un contenu interactif, je pensais qu'il était possible d'afficher ses<option>
s. Après quelques heures à jouer, j'ai découvert que l'utilisationdocument.createEvent()
et le.dispatchEvent()
fonctionnement.Cela dit, l'heure de la démonstration. Voici un violon qui fonctionne.
HTML:
Javascript:
Si quelqu'un trouve un moyen de faire de même mais pas dans Chrome, n'hésitez pas à modifier ce violon .
la source
IE10
,FF 24
. Travaux sur:Chrome 30
,Safari 6.0.5
,Opera 16
La réponse de Xavier Ho couvre comment résoudre le problème dans la plupart des navigateurs actuellement disponibles. Mais, il est une bonne pratique « de ne pas l' envoi / modifier » par les événements JavaScript plus . (Comme,
mousedown
dans ce cas)À partir de la version 53+, Google Chrome n'effectuera pas d'action par défaut pour les événements non fiables . Tels que les événements créés ou modifiés par script, ou distribués via une
dispatchEvent
méthode. Ce changement concerne l'alignement sur Firefox et IE qui, je pense, n'effectuent déjà pas l'action.À des fins de test, Fiddle fourni que la réponse de Xavier ne fonctionnera pas dans Chrome 53+. (Je ne le teste pas FF et IE).
Liens pour référence:
https://www.chromestatus.com/features/5718803933560832 https://www.chromestatus.com/features/6461137440735232
Et initMouseEvent est également obsolète
la source
C'est le plus proche que je puisse obtenir, changer la taille de l'élément sur la souris et restaurer la taille sur la souris:
la source
J'ai ce même problème et le moyen le plus simple que j'ai trouvé pour résoudre c'était avec html et css.
la source
<div style='position:relative'><select> <option>option 1</option> <option>option 2</option> <option>option 3</option> </select> <button>click</button></div>
@DavidPortabellaJe pense que ce n'est plus possible dans Chrome.
Il semble que la version 53 de chrome désactive cette fonctionnalité comme indiqué par Asim K T.
Ils l'ont cependant activé dans la vue Web, mais je ne l'ai pas testé.
Et dans cette discussion, l'idée de laisser les développeurs ouvrir une liste déroulante par programme est abandonnée.
la source
Si quelqu'un cherche toujours ceci:
Javascript:
Mettre à jour:
Un jusqu'à ce qu'il n'y ait pas de solution parfaite à ce problème, mais vous pouvez essayer d'éviter ce scénario. Pourquoi veux-tu faire cela. Je me demandais une solution il y a quelques mois pour créer un plugin de sélection pour les appareils mobiles
https://github.com/HemantNegi/jquery.sumoselect
Enfin, nous avons masqué le div personnalisé (ou tout autre élément) avec un élément de sélection transparent, afin qu'il puisse interagir directement avec l'utilisateur.
la source
iniMouseEvent
semble fonctionner, mais pourquoi ne$(select).trigger('mousedown')
fonctionne pas?Voici le meilleur moyen que j'ai trouvé. REMARQUE Cela ne fonctionne qu'avec IE sous Windows et votre site Web devrait probablement se trouver dans une zone sécurisée - car nous accédons au shell. L'astuce est que ALT-Flèche bas est une touche de raccourci pour ouvrir une liste déroulante de sélection.
la source
Arrêtez de penser qu'une chose est impossible, rien n'est impossible à faire, quand vous le souhaitez.
Utilisez cette fonction d'extension JS créée par un gars.
http://code.google.com/p/expandselect/
Incluez ce JS et appelez-le simplement en passant le paramètre comme identifiant de sélection, comme ça:
la source
<SELECT>
à la chute vers le bas. Comme il déclare explicitement "Les navigateurs ne permettent pas de développer <select> en pur javascript, ce contrôle ne peut être développé qu'en cliquant directement dessus à l'aide de la souris". Ainsi , il est « impossible »! Au lieu de cela, le JS déclare «Nous imitons le contrôle <select> étendu en créant une autre sélection avec plusieurs options affichées à la fois ...» Ce qui est assez différent, et peut ou non être acceptable pour votre cas d'utilisation ....Je me trompe peut-être, mais je ne pense pas que ce soit possible avec la boîte de sélection par défaut. Vous pouvez faire quelque chose avec JS et CSS qui atteint le résultat souhaité, mais pas (à ma connaissance) le SELECT vanilla.
la source
L'ouverture d'une "sélection HTML" est possible grâce à certaines solutions de contournement mentionnées dans cette question et d'autres similaires. Cependant, une manière plus propre de faire ceci est d'ajouter une bibliothèque de sélection à votre projet comme "select2" ou "choisi". Par exemple, ouvrir un select2 par programme serait aussi simple que:
la source
Ce n'est pas exactement ce que vous avez demandé, mais j'aime cette solution pour sa simplicité. Dans la plupart des cas où je souhaite lancer une liste déroulante, c'est parce que je valide que l'utilisateur a effectivement fait une sélection. Je change la taille de la liste déroulante et la concentre, ce qui met bien en évidence ce qu'ils ont sauté:
la source