¿Cómo se puede indicar mediante programación a un HTML select
que se despliegue (por ejemplo, debido al desplazamiento del mouse)?
javascript
html
Corey Trager
fuente
fuente
<select>
, ya que la gente espera que se comporte de cierta manera y evitará que las personas en otras plataformas (como dispositivos móviles) usen su sitio.Respuestas:
No puede hacer esto con una etiqueta de selección HTML, pero puede hacerlo con JavaScript y HTML. Hay una variedad de controles existentes que hacen esto, por ejemplo, la lista de "sugerencias" adjunta a la entrada SO "etiqueta interesante / ignorada", o la búsqueda de direcciones de correo electrónico de Gmail.
Hay muchos controles JavaScript + HTML que proporcionan esta capacidad; busque controles de autocompletar para obtener ideas.
Vea este enlace para el control de Autocompletar ... http://ajaxcontroltoolkit.codeplex.com/
fuente
Esto solía ser posible con HTML + Javascript, a pesar de que en todas partes la gente dice que no lo es, pero quedó obsoleto más tarde y no funciona ahora.
Sin embargo, esto solo funcionó en Chrome. Lea más si está interesado.
De acuerdo con el Borrador de trabajo del W3C para HTML5, Sección 3.2.5.1.7. Contenido interactivo :
<select>
al ser un contenido interactivo, creí que es posible mostrar programáticamente sus<option>
s. Después de unas horas de jugar, descubrí que usardocument.createEvent()
y.dispatchEvent()
funciona.Dicho esto, tiempo de demostración. Aquí hay un violín que funciona.
HTML:
Javascript:
Si alguien encuentra una manera de hacer lo mismo pero no en Chrome, no dude en modificar este violín .
fuente
IE10
,FF 24
. Funciona en:Chrome 30
,Safari 6.0.5
,Opera 16
La respuesta de Xavier Ho cubre cómo resolver el problema en la mayoría de los navegadores que existen actualmente. Pero, es una buena práctica 'no enviar / modificar' eventos por JavaScript . (Como,
mousedown
en este caso)A partir de la versión 53+, Google Chrome no realizará la acción predeterminada para eventos no confiables . Como eventos creados o modificados por script o enviados a través de un
dispatchEvent
método. Este cambio es para alinearse con Firefox e IE, que creo que ya no están realizando la acción.Para fines de prueba, Fiddle proporcionó la respuesta de Xavier no funcionará en Chrome 53+. (No lo pruebo FF e IE).
Enlaces de referencia:
https://www.chromestatus.com/features/5718803933560832 https://www.chromestatus.com/features/6461137440735232
Y initMouseEvent también está en desuso
fuente
Esto es lo más cerca que pude conseguir, cambiar el tamaño del elemento onmouseover y restaurar el tamaño onmouseout:
fuente
Tengo este mismo problema y la forma más fácil que encontré para solucionar esto fue con html y css.
fuente
<div style='position:relative'><select> <option>option 1</option> <option>option 2</option> <option>option 3</option> </select> <button>click</button></div>
@DavidPortabellaCreo que esto ya no es posible en Chrome.
Parece que la versión 53 de Chrome deshabilita esta funcionalidad según lo declarado por Asim K T.
Sin embargo, lo han habilitado en la vista web, pero no lo he probado.
Y en esta discusión se abandona la idea de permitir que los desarrolladores abran un menú desplegable programáticamente.
fuente
Si alguien todavía está buscando esto:
Javascript:
Actualizar:
Uno hasta que no haya una solución perfecta para este problema, pero puede intentar evitar este escenario. ¿Por qué quieres hacer esto? Hace unos meses me preguntaba por una solución para crear un complemento selecto para dispositivos móviles
https://github.com/HemantNegi/jquery.sumoselect
Finalmente terminó enmascarando el div personalizado (o cualquier otro elemento) con un elemento de selección transparente, para que pueda interactuar directamente con el usuario.
fuente
iniMouseEvent
parece funcionar, pero ¿por qué$(select).trigger('mousedown')
no funciona?Esta es la mejor forma que encontré. NOTA Solo funciona con IE en Windows y su web probablemente necesite estar en una zona segura, porque accedemos al shell. El truco es que ALT-Flecha abajo es una tecla de método abreviado para abrir un menú desplegable de selección.
fuente
Deja de pensar que una cosa es imposible, nada es imposible de hacer, cuando quieres hacer.
Utilice esta función de expansión JS creada por un chico.
http://code.google.com/p/expandselect/
Incluya este JS y simplemente llámelo pasando el parámetro como su ID de selección, así:
fuente
<SELECT>
a caer hacia abajo. Como dice explícitamente "Los navegadores no permiten expandir <seleccionar> en javascript puro, ese control se puede expandir solo haciendo clic directamente en él con el mouse". ¡Entonces es "imposible"! En cambio, el JS dice "Imitamos el control <select> expandido creando otra selección con múltiples opciones que se muestran a la vez ..." Lo cual es bastante diferente, y puede o no ser aceptable para su caso de uso ...Puede que me equivoque, pero no creo que sea posible con el cuadro de selección predeterminado. Podría hacer algo con JS y CSS que logre el resultado deseado, pero no (que yo sepa) el SELECT de vainilla.
fuente
Es posible abrir una "selección de HTML" a través de algunas de las soluciones mencionadas en esta pregunta y otras similares. Sin embargo, una forma más limpia de hacer esto es agregar una biblioteca de selección a su proyecto como "select2" o "elegido". Por ejemplo, abrir un select2 mediante programación sería tan fácil como:
fuente
Esto no es exactamente lo que pediste, pero me gusta esta solución por su simplicidad. En la mayoría de los casos en los que deseo iniciar un menú desplegable, es porque estoy validando que el usuario realmente hizo una selección. Cambio el tamaño del menú desplegable y lo enfoco, lo que resalta muy bien lo que han omitido:
fuente