¿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)?
Respuesta
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 "Sugerir" adjuntada 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 los controles de autocompletar para obtener ideas.
Vea este enlace para el control de autocompletar ... http://ajaxcontroltoolkit.codeplex.com/
esto es una pena vergüenza: los navegadores móviles proporcionan una lista de desplazamiento específica del sistema operativo, y necesito que aparezca automáticamente. – Michael
Puedo estar equivocado, pero no creo que sea posible con el cuadro de selección predeterminado. Podría hacer algo con JS & CSS que logre el resultado deseado, pero no (según mi conocimiento) el vainilla SELECT.
Esto es lo más cerca que pude conseguir, cambiar el tamaño del elemento onmouseover y onmouseout restaurar el tamaño:
<select onMouseOut="this.size=1;" onMouseOver="this.size=this.length;">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
</select>
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>
No funcionará a menos que lo haga [esto] (http://stackoverflow.com/suggested-edits/50215). – Knu
@Knu Internet Explorer agrega automáticamente los ID de elementos como referencias al elemento al alcance global. – user2428118
¿Ya no funciona en IE11? –
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();
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.
¡Gracias por esto! Necesitaba emular el comportamiento ALT + DOWN ARROW de IE, precisamente en Chrome. –
Ojalá pudiera agregar a tu generosidad por esto. Muchas gracias. –
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. –
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)
Para ser claros, JS no * * hace que aparezca un '
Si alguno todavía está buscando esto:
<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" >Show dropdown items</button>
Javascript:
var is_visible=false;
$(document).ready(function(){
$('#fire').click(function (e) {
var element = document.getElementById('dropdown');
if(is_visible){is_visible=false; return;}
is_visible = true;
var event;
event = document.createEvent('MouseEvents');
event.initMouseEvent('mousedown', true, true, window);
element.dispatchEvent(event);
/* can be added for i.e. compatiblity.
optionsSelect.focus();
var WshShell = new ActiveXObject("WScript.Shell");
WshShell.SendKeys("%{DOWN}");
*/
e.stopPropagation();
return false;
});
$(document).click(function(){is_visible=false; });
});
Actualización:
Uno hasta que no hay solución perfecta a este problema, pero se puede tratar de evitar esta situación. ¿Por qué quieres hacer esto? Me preguntaba por una solución pocos meses atrás para hacer un selecto plug-in para dispositivos móviles
https://github.com/HemantNegi/jquery.sumoselect
Finalmente terminó con cinta el div personalizado (o cualquier otro elemento) con un elemento de selección transparente, de modo que pueda interactúa directamente con el usuario.
esto funcionaría solo para navegadores webkit ... Sólo para Chrome ... –
Los complementos como https://github.com/HemantNegi/jquery.sumoselect son la única solución de navegador cruzado que en realidad se ve mejor que el control predeterminado. – Justin
'iniMouseEvent' parece funcionar, pero ¿por qué' $ (select) .trigger ('mousedown') 'no funciona? –
La respuesta de Xavier Ho es cómo solucionar el problema en la mayoría de los buscadores actualmente. Pero, es una buena práctica 'no enviar/modificar' eventos por JavaScript más. (Como, mousedown
en este caso)
A partir de la versión 53+, Google Chrome no realizará la acción predeterminada para eventos no confiables. Tales como eventos creados o modificados por script, o enviados a través del método dispatchEvent
. Este cambio es para alinearme con Firefox e IE, y creo que ya no estoy realizando la acción.
Para propósitos de prueba, Fiddle siempre que la respuesta de Xavier no funcione en chrome 53+. (No lo pruebo FF e IE).
Enlaces para la referencia:
https://www.chromestatus.com/features/5718803933560832 https://www.chromestatus.com/features/6461137440735232
Y initMouseEvent es también deprecated
¡Esto debe votarse ya que ahora es la respuesta correcta! – CleanUp
O la Q original solo puede aceptar esta respuesta. –
Creo que esto ya no es posible en Chrome.
Parece la versión 53 de Chrome inhabilita esta funcionalidad según lo declarado por Asim K T.
De acuerdo con la especificación http://www.w3.org/TR/DOM-Level-3-Events/#trusted-events
Eventos de confianza no deben activar la acción por defecto (excepto haciendo click evento) .
Lo han habilitado en vista web, pero no lo he probado.
Hemos encontrado que algunos webviews están utilizando fastclick dentro de ellos y debido a un riesgo de rotura vamos a permitir que el mousedown selecciona incluso si son de confianza.
Y en este discussion se abandona la idea de permitir a los desarrolladores abrir un menú desplegable programáticamente.
me alegra que esté trabajando en WebView, ya que ese es mi caso de uso. – Michael
- 1. Cómo programar una tarea mediante programación
- 2. ¿Cómo programar (y restablecer) una tarea mediante programación con SpringFramwork?
- 3. Programar mediante programación una etiqueta de varias líneas
- 4. ¿Se puede encontrar el valor de un algoritmo mediante programación mediante el análisis de sus perfs?
- 5. Método sugerido para manejar rangos no solapados (por ejemplo, programación)
- 6. ¿Se puede aceptar mediante programación una corrección ortográfica en UITextView?
- 7. ¿Se puede detectar el ruido blanco mediante programación?
- 8. Cómo doblar/desplegar etiquetas HTML con Vim
- 9. ¿Ejemplo completo de cómo programar RotateAnimations?
- 10. ¿Puede determinar mediante programación si un usuario tiene licencia para un paquete?
- 11. ¿Cómo elimino un dominio DNS mediante programación?
- 12. ¿Cómo convertir Selenese (html) a Python mediante programación?
- 13. No se puede establecer mediante programación TextView sombra
- 14. ¿Cómo añadir un NSTableView desplazable mediante programación
- 15. aumentar mediante programación un comando
- 16. ¿Cómo se crea un documento en Google Docs mediante programación?
- 17. Html Select List: ¿por qué onchange se llamará dos veces?
- 18. ¿Cómo crear subdominios para IIS7 mediante programación?
- 19. No se puede encontrar la entrada al tiempo que añade proyecto para desplegar el montaje
- 20. ¿Consulta mediante programación MSDN?
- 21. Código de ejemplo para programación asincrónica en C
- 22. ¿Cómo finalizo/reinicié un UIGestureRecognizer mediante programación?
- 23. Agregar controles mediante programación al formulario WPF
- 24. Cómo ejecutar NUnit mediante programación
- 25. crear mediante programación un UILabel
- 26. ¿Cómo se modelan las misiones del juego (por ejemplo, Oblivion)?
- 27. Cómo reiniciar mediante programación?
- 28. Cómo desplazarse mediante programación un HorizontalScrollView
- 29. programación abrir un menú desplegable
- 30. Cómo se puede cancelar un proceso de ejecución de SQL Server mediante programación
Recomendaría no atornillar con el comportamiento del '
@BrianDonovan No es que no puedas agregar algo de manejo para eso. –
@shasikanth: tu violín no funciona ni en Firefox 37 en Chrome – rubo77