アップデート:
古い回答では、動的に作成された要素にバインドできないと述べられていましたが (これはまだある程度当てはまります)、問題のプラグインの更新により、これは問題ではなくなりました。
問題のプラグインには、ハンドラーを複数回トリガーするという問題がまだありますが、アラート メッセージが使用されている場合、更新のおかげで動的に作成された要素にバインドできるようになりました。
これを行うために行う必要があるのは、元のターゲット選択リスト.on()
のイベントにを介してバインドすることだけです。chosen:showing_dropdown
ただし、継続的に作成されるアラート ボックスの問題を解決するために、underscore.js の .debounce()
メソッドを使用することにしました。これにより、1 秒ごとに 1 回だけ即時にトリガーされます。
アンダースコア ライブラリは決して必要ではありませんが、その小さな癖を回避するために、ある種のデバウンス機能が必要になります。
var debouncedAlert = _.debounce(window.alert, 1000, true);
$('#select').chosen();
$('#select').on('chosen:showing_dropdown', function(e){
e.preventDefault();
e.stopPropagation();
debouncedAlert('focused');
});
作業例:
$(document).ready(function() {
var debouncedAlert = _.debounce(window.alert, 1000, true);
$('#select').chosen();
$('#select').on('chosen:showing_dropdown', function(e){
e.preventDefault();
e.stopPropagation();
debouncedAlert('focused');
});
$('button').click(function() {
$('#select').trigger('chosen:open');
});
});
body {
margin: 10px;
}
select {
width: 200px;
}
<link href="https://harvesthq.github.io/chosen/chosen.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><script src="https://harvesthq.github.io/chosen/chosen.jquery.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
<input type="text" value="Put your cursor here then Press Tab. Chosen will be focused!" style="width:100%">
<br>
<select id="select" multiple>
<option value="1">abc</option>
<option value="2">def</option>
<option value="3">ghi</option>
</select>
<br>
<button>Press this button. Now chosen <b>will</b> be focused! :)</button>
古い答え:
いいえ、できません。Jquery の通常のバインド方法は、動的に作成された要素では機能しません。これらのタイプの要素にバインドするには、.on()
.
$('.chzn-choices').focus(function(e){
e.preventDefault();
alert('focused!');
});
次のように変更されます。
$('#select_chzn').on('focus', '.chzn-choices', function(e){
e.preventDefault();
alert('focused!');
});
この場合、イベントをコンテナー要素に委譲し、それを特定の要素に向けます。
実施例