<p>elegido: abierto no funciona</p>

Creado en 22 dic. 2013  ·  5Comentarios  ·  Fuente: harvesthq/chosen

Estoy tratando de abrir una selección después de hacer clic en un botón, pero no funciona. Si inserto y alerta() después del gatillo, se abre...
(Usando la v1.0 elegida con jquery)

ejemplo:

<select id="select">
    <option value="1">a</option>
    <option value="2">b</option>
    <option value="3">c</option>
</select>
<br>
<button onclick="$('#select').trigger('chosen:open'); ">Press this button to open (doesnt work) </button>
<button onclick="$('#select').trigger('chosen:open'); alert('ups!');">Press this button to open (work???)</button>

<script>
$(document).ready(function() {
$('#select').chosen();
});
</script>

ejemplo en: http://jsfiddle.net/EArg6/28/

Comentario más útil

Cuando hace clic en el botón, Chosen recibe el evento chosen:open . Sin embargo, el evento continúa burbujeando el DOM y Chosen detecta inmediatamente un clic en un elemento que no es el Chosen activo... por lo que lo cierra. ¿Tener sentido?

Si está trabajando con JS en línea, la solución más fácil es usar setTimeout para salir de la pila de eventos actual:

onClick="setTimeout(function(){ $('#select').trigger('chosen:open'); }, 0)"

Sin embargo, es casi seguro que no debería usar JS en línea. Todavía puede usar setTimeout si lo desea, pero solo detener el burbujeo del evento debería ser suficiente.

$('button').on("click", function(evt){
  evt.stopPropagation();
  $('#select').trigger('chosen:open');
});

He actualizado tu violín con este código de trabajo: http://jsfiddle.net/EArg6/33/

Todos 5 comentarios

Ningún botón me funciona en tu Fiddle (en Safari).

¿Qué navegador/versión estás usando?

Lo probé con:

  • Firefox 25.0.1
  • Ópera 12.16
  • cromo 31.0.1650.63m

el primer boton no funciona
El segundo botón abre la lista de opciones (solo para cerrar cuando cierro el cuadro de "alerta").

Cuando hace clic en el botón, Chosen recibe el evento chosen:open . Sin embargo, el evento continúa burbujeando el DOM y Chosen detecta inmediatamente un clic en un elemento que no es el Chosen activo... por lo que lo cierra. ¿Tener sentido?

Si está trabajando con JS en línea, la solución más fácil es usar setTimeout para salir de la pila de eventos actual:

onClick="setTimeout(function(){ $('#select').trigger('chosen:open'); }, 0)"

Sin embargo, es casi seguro que no debería usar JS en línea. Todavía puede usar setTimeout si lo desea, pero solo detener el burbujeo del evento debería ser suficiente.

$('button').on("click", function(evt){
  evt.stopPropagation();
  $('#select').trigger('chosen:open');
});

He actualizado tu violín con este código de trabajo: http://jsfiddle.net/EArg6/33/

gracias @pfiller

Gracias @pfiller , ¡esa solución y explicación me ahorraron mucha acidez estomacal!

¿Fue útil esta página
0 / 5 - 0 calificaciones