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/
Nenhum botão funciona para mim no seu Fiddle (no Safari).
Qual navegador/versão você está usando?
Testei com:
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!
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: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.Atualizei seu violino com este código de trabalho: http://jsfiddle.net/EArg6/33/