J'essaie d'ouvrir une sélection après un clic sur un bouton, mais cela ne fonctionne pas. Si j'insère et alert() après le déclencheur, il s'ouvre...
(En utilisant la v1.0 choisie avec jquery)
Exemple:
<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>
exemple dans : http://jsfiddle.net/EArg6/28/
Aucun des deux boutons ne fonctionne pour moi dans votre Fiddle (dans Safari).
Quel navigateur/version utilisez-vous ?
Je l'ai testé avec :
Le premier bouton ne fonctionne pas
Le deuxième bouton ouvre la liste des options (pour se fermer uniquement lorsque je ferme la case "alerte").
Lorsque vous cliquez sur le bouton, Chosen reçoit l'événement chosen:open
. Cependant, l'événement continue de bouillonner dans le DOM et Chosen détecte immédiatement un clic sur un élément qui n'est pas le Chosen actif... alors il le ferme. Avoir du sens ?
Si vous travaillez avec du JS en ligne, la solution la plus simple consiste à utiliser setTimeout
pour sortir de la pile d'événements actuelle :
onClick="setTimeout(function(){ $('#select').trigger('chosen:open'); }, 0)"
Cependant, vous ne devriez certainement pas utiliser JS en ligne. Vous pouvez toujours utiliser setTimeout
si vous le souhaitez, mais le simple fait d'arrêter le bouillonnement de l'événement devrait suffire.
$('button').on("click", function(evt){
evt.stopPropagation();
$('#select').trigger('chosen:open');
});
J'ai mis à jour votre violon avec ce code de travail : http://jsfiddle.net/EArg6/33/
merci @pfiller
Merci @pfiller , cette solution et cette explication m'ont épargné beaucoup de brûlures d'estomac !
Commentaire le plus utile
Lorsque vous cliquez sur le bouton, Chosen reçoit l'événement
chosen:open
. Cependant, l'événement continue de bouillonner dans le DOM et Chosen détecte immédiatement un clic sur un élément qui n'est pas le Chosen actif... alors il le ferme. Avoir du sens ?Si vous travaillez avec du JS en ligne, la solution la plus simple consiste à utiliser
setTimeout
pour sortir de la pile d'événements actuelle :Cependant, vous ne devriez certainement pas utiliser JS en ligne. Vous pouvez toujours utiliser
setTimeout
si vous le souhaitez, mais le simple fait d'arrêter le bouillonnement de l'événement devrait suffire.J'ai mis à jour votre violon avec ce code de travail : http://jsfiddle.net/EArg6/33/