ボタンをクリックした後に選択を開こうとしていますが、機能しません。 トリガーの後に挿入してalert()を実行すると、トリガーが開きます...
(選択したv1.0をjqueryで使用)
例:
<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>
例: http :
Fiddle(Safari)ではどちらのボタンも機能しません。
どのブラウザ/バージョンを使用していますか?
私はそれをテストしました:
最初のボタンが機能しない
2番目のボタンはオプションリストを開きます(「アラート」ボックスを閉じたときにのみ閉じます)。
ボタンをクリックすると、Chosenはchosen:open
イベントを受信します。 ただし、イベントはDOMをバブルし続け、ChosenはアクティブなChosenではない要素のクリックをすぐに検出します...そのため、要素を閉じます。 わかる?
インラインJSを使用している場合、最も簡単な解決策は、 setTimeout
を使用して現在のイベントスタックから抜け出すことです。
onClick="setTimeout(function(){ $('#select').trigger('chosen:open'); }, 0)"
ただし、ほぼ確実にインラインJSを使用するべきではありません。 必要に応じてsetTimeout
使用することもできますが、イベントのバブリングを停止するだけで十分です。
$('button').on("click", function(evt){
evt.stopPropagation();
$('#select').trigger('chosen:open');
});
私はあなたのフィドルをこの動作するコードで更新しました: http :
ありがとう@pfiller
@pfillerに感謝し
最も参考になるコメント
ボタンをクリックすると、Chosenは
chosen:open
イベントを受信します。 ただし、イベントはDOMをバブルし続け、ChosenはアクティブなChosenではない要素のクリックをすぐに検出します...そのため、要素を閉じます。 わかる?インラインJSを使用している場合、最も簡単な解決策は、
setTimeout
を使用して現在のイベントスタックから抜け出すことです。ただし、ほぼ確実にインラインJSを使用するべきではありません。 必要に応じて
setTimeout
使用することもできますが、イベントのバブリングを停止するだけで十分です。私はあなたのフィドルをこの動作するコードで更新しました: http :