<p>escolhido:aberto não funciona</p>

Criado em 22 dez. 2013  ·  5Comentários  ·  Fonte: harvesthq/chosen

Estou tentando abrir um select após um clique de botão, mas não funciona. Se eu inserir e alert() após o gatilho ele abre...
(Usando a v1.0 escolhida com jquery)

exemplo:

<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>

exemplo em: http://jsfiddle.net/EArg6/28/

Comentários muito úteis

Quando você clica no botão, Chosen está recebendo o evento chosen:open . No entanto, o evento continua a borbulhar no DOM e o Chosen detecta imediatamente um clique em um elemento que não é o Chosen ativo... então ele o fecha. Faz sentido?

Se você estiver trabalhando com JS embutido, a solução mais fácil é usar setTimeout para sair da pilha de eventos atual:

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

Você quase certamente não deveria estar usando JS embutido, no entanto. Você ainda pode usar setTimeout se quiser, mas apenas parar o borbulhar do evento deve ser suficiente.

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

Atualizei seu violino com este código de trabalho: http://jsfiddle.net/EArg6/33/

Todos 5 comentários

Nenhum botão funciona para mim no seu Fiddle (no Safari).

Qual navegador/versão você está usando?

Testei com:

  • Firefox 25.0.1
  • Ópera 12.16
  • Cromo 31.0.1650.63 m

O primeiro botão não funciona
O segundo botão abre a lista de opções (só para fechar quando eu fechar a caixa "alerta").

Quando você clica no botão, Chosen está recebendo o evento chosen:open . No entanto, o evento continua a borbulhar no DOM e o Chosen detecta imediatamente um clique em um elemento que não é o Chosen ativo... então ele o fecha. Faz sentido?

Se você estiver trabalhando com JS embutido, a solução mais fácil é usar setTimeout para sair da pilha de eventos atual:

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

Você quase certamente não deveria estar usando JS embutido, no entanto. Você ainda pode usar setTimeout se quiser, mas apenas parar o borbulhar do evento deve ser suficiente.

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

Atualizei seu violino com este código de trabalho: http://jsfiddle.net/EArg6/33/

obrigado @pfiller

Obrigado @pfiller , essa solução e explicação me salvou de muita azia!

Esta página foi útil?
0 / 5 - 0 avaliações