Não consigo escolher Chosen:pronto para disparar, alguém pode confirmar se esse uso está certo ou errado?
jQuery('.chzn-select').on(' escolhido:pronto ', function () {
jQuery('li').ScrollText();
});
".chzn-select" é a classe escolhida antes deste código.
Obrigado
Eu acho que você está simplesmente vinculando seu ouvinte tarde demais (se você o vincular depois que o escolhido estiver pronto, ele não verá o evento). Tente vincular o ouvinte antes de aplicar escolhido
Ah, isso era parte da solução. havia também uma linha desvinculando todos os eventos escolhidos antes de configurá-lo, o que o removia. Eu acredito que a linha unbind foi adicionada devido à estranheza no asp.net e nos postbacks.
Obrigado pela resposta rápida.
Fechado. :+1:
Desculpe outra coisa, eu deveria ser capaz de obter o objeto escolhido nesta função como abaixo, está correto?
jQuery('.chzn-select').on(' escolhido:pronto ', function (escolhido) {
jQuery('li').ScrollText();
});
Estou procurando obter o novo elemento e fazer algo com ele quando estiver pronto. O objeto escolhido contém isso? Vejo que o obj tem um resultado porém isso é sempre indefinido.
Ok, estou fechando novamente.
Eu descobri que isso nunca vai funcionar. Como desejo aplicar um evento a cada opção no menu suspenso escolhido, no entanto, o problema é que as opções não são criadas até que o menu suspenso seja clicado. Portanto, eu poderia mover meu código para o evento " choosed:showing_dropdown ".
o primeiro argumento do ouvinte de eventos é sempre o objeto de evento. Os parâmetros são o segundo argumento: http://harvesthq.github.io/chosen/options.html#triggered -events
ah eu perdi o segundo parâmetro. Obrigado.
Você deve vincular seus eventos usando delegação (como o obsoleto $().live()
), porque os elementos não precisam estar presentes na página ao vincular:
$('.chosen-select').on('click', 'li', handlerFunction);
Mais sobre delegação de eventos aqui: https://learn.jquery.com/events/event-delegation/
Também me deparei com um problema em que o escolhido: pronto não estava disparando.
Isso não funcionou:
$('select')
.chosen()
.on('chosen:ready', function(){
console.log('chosen:ready')
});
mas vincular o evento antes de instanciar escolhido funcionou:
$('select')
.on('chosen:ready', function(){
console.log('chosen:ready')
})
.chosen();
o evento está disparando. Mas no primeiro caso, seu ouvinte provavelmente foi registrado após ser acionado
@stof Bom esclarecimento, obrigado.
Apenas imaginando, mas por que os itens da lista são criados no evento "showing_dropdown" em vez do evento "ready"?
Os itens da lista não são criados no chosen:showing_dropdown
.
chosen:ready
é acionado quando os resultados são construídos e Escolhido está pronto para receber eventos, chosen:showing_dropdown
é acionado após a abertura de Escolhido.
Então, o que é que você está se perguntando? ;)
Minha lista de "Resultados escolhidos" está sempre vazia até que eu acione o menu suspenso para abrir. Encontrei outra maneira de fazer o que estava fazendo, mas estava um pouco curioso sobre como isso estava funcionando.
Comentários muito úteis
Também me deparei com um problema em que o escolhido: pronto não estava disparando.
Isso não funcionou:
mas vincular o evento antes de instanciar escolhido funcionou: