2008-10-30 11 views
76

¿Cómo se puede programar mediante programación un HTML select para desplegar (por ejemplo, debido al mouseover)?¿Cómo se puede programar mediante programación un HTML SELECT para desplegar (por ejemplo, debido al mouseover)?

+4

Recomendaría no atornillar con el comportamiento del ' RealHowTo

+1

También es necesario agregar onchange = "this.size = 1" para que el menú colapse tan pronto como se realice la selección. Las reglas de CSS del elemento también se deben configurar. – gm2008

+0

esto no funciona en el dispositivo móvil – Michael

3

He aquí la mejor manera 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-Down Arrow es una tecla de método abreviado para abrir un menú desplegable de selección.

<button id="optionsButton" style="position:absolute;top:10px;left:10px;height:22px;width:100px;z-index:10" onclick="doClick()">OPTIONS</button> 
<select id="optionsSelect" style="position:absolute;top:10px;left:10px;height:20px;width:100px;z-index:9"> 
    <option>ABC</option> 
    <option>DEF</option> 
    <option>GHI</option> 
    <option>JKL</option> 
</select> 
<script type="text/javascript"> 
    function doClick() { 
     optionsSelect.focus(); 
     var WshShell = new ActiveXObject("WScript.Shell"); 
     WshShell.SendKeys("%{DOWN}"); 
    } 
</script> 
+2

No funcionará a menos que lo haga [esto] (http://stackoverflow.com/suggested-edits/50215). – Knu

+0

@Knu Internet Explorer agrega automáticamente los ID de elementos como referencias al elemento al alcance global. – user2428118

+0

¿Ya no funciona en IE11? –

-2

Esto no es exactamente lo que pidieron, pero me gusta esta solución por su sencillez. En la mayoría de los casos en los que deseo iniciar un menú desplegable, es porque estoy validando que el usuario ha hecho una selección. Puedo cambiar el tamaño de la lista desplegable y enfocarla, que destaca muy bien lo que han omitidos:

$('#cboSomething')[0].size = 3; 
$('#cboSomething')[0].focus(); 
119

Esto es realmente posible con HTML + Javascript, a pesar de todos los demás sitios la gente dice que no lo es.

Sin embargo, esto solo funciona en Chrome. Lee más si estás interesado.


Según W3C Working Draft for HTML5, Section 3.2.5.1.7. Interactive Content:

Ciertos elementos en HTML tienen un comportamiento de activación, lo que significa que el usuario puede activar ellos. Esto desencadena una secuencia de eventos que depende del mecanismo de activación , por ejemplo, mediante el teclado o la entrada de voz, o mediante clics del mouse.

Cuando el usuario desencadena un elemento con un comportamiento de activación definido distinto de hacer clic en él, la acción predeterminada del evento de interacción debe ser ejecutar pasos de activación de clic sintético en el elemento.

<select> ser un contenido interactivo, que cree que es posible visualizar programáticamente sus <option> s.Después de algunas horas de jugar, descubrí que el uso de document.createEvent() y .dispatchEvent() funciona.

Dicho esto, demo time. Here is a working Fiddle.


HTML:

<select id="dropdown"> 
    <option value="Red">Red</option> 
    <option value="Green">Green</option> 
    <option value="Blue">Blue</option> 
</select> 
<br> 
<button id="fire" type="button" onclick="runThis()">Show dropdown items</button>​ 

Javascript:

// <select> element displays its options on mousedown, not click. 
showDropdown = function (element) { 
    var event; 
    event = document.createEvent('MouseEvents'); 
    event.initMouseEvent('mousedown', true, true, window); 
    element.dispatchEvent(event); 
}; 

// This isn't magic. 
window.runThis = function() { 
    var dropdown = document.getElementById('dropdown'); 
    showDropdown(dropdown); 
}; 

Si alguien encuentra una manera de hacer lo mismo, pero no en Chrome, please feel free to modify this fiddle.

+2

¡Gracias por esto! Necesitaba emular el comportamiento ALT + DOWN ARROW de IE, precisamente en Chrome. –

+3

Ojalá pudiera agregar a tu generosidad por esto. Muchas gracias. –

+0

Me entristece informar que, si bien este método parece funcionar en las vistas web de Android (por ejemplo, Phonegap), no se puede decir lo mismo de iOS. A partir de 2013-07-25, probado en iOS6 y Android 4.2.2. –

1

Deja de pensar que una cosa es imposible, nada es imposible de hacer, cuando quieras.

Utilice esta función expandir JS creada por un hombre.

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

Incluir este JS y simplemente llamar la que pasa el parámetro como su SELECT ID, así:

ExpandSelect(MySelect) 
+1

Para ser claros, JS no * * hace que aparezca un ' en javascript puro, ese control solo se puede expandir haciendo clic directamente sobre él con el mouse". ¡Así que * es * "imposible"! En su lugar, el JS dice "Imitamos el control expandido de