¿Puedo abrir una lista desplegable usando jQuery?

Resuelto Jon Tackabury asked hace 15 años • 14 respuestas

Para esta lista desplegable en HTML:

<select id="countries">
<option value="1">Country</option>
</select>

Me gustaría abrir la lista (lo mismo que hacer clic izquierdo en ella). ¿Es esto posible usando JavaScript (o más específicamente jQuery)?

Jon Tackabury avatar Dec 12 '08 01:12 Jon Tackabury
Aceptado

Estaba tratando de encontrar lo mismo y me decepcioné. Terminé cambiando el tamaño del atributo para el cuadro de selección para que parezca abrirse

$('#countries').attr('size',6);

y luego cuando hayas terminado

$('#countries').attr('size',1);
CommentLuv avatar Dec 21 '2010 10:12 CommentLuv

Puede simular fácilmente un clic en un elemento , pero un clic en <select>no abrirá el menú desplegable.

Usar múltiples selecciones puede ser problemático. Quizás debería considerar botones de opción dentro de un elemento contenedor que pueda expandir y contraer según sea necesario.

ieure avatar Dec 11 '2008 18:12 ieure

Me he encontrado con el mismo problema y tengo una solución. Una función llamada ExpandSelect() que emula el clic del mouse en el elemento "seleccionar", lo hace creando otro <select>elemento que está absolutamente posicionado y tiene múltiples opciones visibles a la vez configurando el sizeatributo. Probado en los principales navegadores: Chrome, Opera, Firefox, Internet Explorer. Explicación de cómo funciona, junto con el código aquí:

Editar (el enlace estaba roto) .

Creé un proyecto en Google Code, busque el código allí:

http://code.google.com/p/expandselect/

Capturas de pantalla

Hay una pequeña diferencia en la GUI al emular el clic, pero en realidad no importa, compruébalo tú mismo:

Al hacer clic con el mouse:

Hacer clic con el mouse
(fuente: googlecode.com )

Al emular haga clic en:

EmularHacer clic
(fuente: googlecode.com )

Más capturas de pantalla en el sitio web del proyecto, enlace arriba.

Czarek Tomczak avatar Nov 09 '2011 19:11 Czarek Tomczak

Esto debería cubrirlo:

 var event;
 event = document.createEvent('MouseEvents');
 event.initMouseEvent('mousedown', true, true, window);
 countries.dispatchEvent(event); //we use countries as it's referred to by ID - but this could be any JS element var

Esto podría estar vinculado, por ejemplo, a un evento de pulsación de tecla, de modo que cuando el elemento tenga el foco, el usuario pueda escribir y se expandirá automáticamente...

--Contexto--

  modal.find("select").not("[readonly]").on("keypress", function(e) {

     if (e.keyCode == 13) {
         e.preventDefault();
         return false;
     }
     var event;
     event = document.createEvent('MouseEvents');
     event.initMouseEvent('mousedown', true, true, window);
     this.dispatchEvent(event);
 });
Stuart.Sklinar avatar Oct 10 '2014 10:10 Stuart.Sklinar