jQuery Chosenの選択/ドロップダウンリストをBootboxモーダルで動作させようとしています。標準の HTML ページで動作するコードはほぼ同じなので、リストをモーダルにポップするのは簡単だと思いました。div を生成し、モーダルでオブジェクトを選択し、それが「表示」された後、Chosen を呼び出します。
div.on("shown", function() {
$(".chzn-select").chosen();
$(".chzn-select-deselect").chosen({allow_single_deselect:true});
myApp.init();
});
この後、Chosen が壊れたようです。選択項目がグレー表示され、クリックできません。
myApp.init() 内で、選択項目を入力すると、機能します。
モーダルの舞台裏を見ると、Chosen コンテナーが初期化されているように見えますが、選択オプションが chzn-drop div に転送されていません。画像では、chzn-results UL にオプションを入力する必要があります。モーダルバージョンは次のとおりです。
HTML バージョンでは、次のようになります。
HTML バージョンでは、私のコードは body タグの一番下にあり (同様に、選択オプションは myApp.init() に取り込まれています)、問題なく動作しているようです。呼び出しの順序は同じようです...
$(".chzn-select").chosen(); $(".chzn-select-deselect").chosen({allow_single_deselect:true});
$(document).ready(function(){
myApp.init();
});
これは単なる z-index の問題ではありません。モーダル内では、適切に初期化されているにもかかわらず、Chosen プラグインが何らかの形で混乱し、バインドまたは更新されていないようです。トラブルシューティングの方法がわからず、同じ問題を抱えている他の人を見つけることができません...これは、タイミングの問題である可能性があると思います(しかし、なぜHTMLで機能するのですか?)、または私は愚かなことをしています(非常におそらく)。どこを見るべきか、何が間違っているかについて誰か提案がありますか?
ありがとう!
============================
選択入力用の HTML の追加 (Christopher の質問による)
両方のバージョンで、select に次のコードを入力します (myApp.init() の内容を編集したバージョン)。
$.ajax call to a RESTful URL
var callbackSuccess = function(data){
if ( data ) {
populateDropDownById(data, 'objectiveBanks');
//Other things
}
};
function populateDropDownById(data, elementId) {
$('#' + elementId).append('<option value = "null"> -- Select -- </option>');
$.each( data, function( id, bean ) {
var name = bean.displayName.text;
var id = bean.id;
$('#' + elementId).append('<option value =' + id + '>' + name + '</option>');
});
}
実際の要素自体は次のとおりです。動作しないモーダル バージョン:
var obj_banks_select = $('<select id="objectiveBanks" name="objectiveBank" onchange="populateObjectives()" tabindex="2"></select>')
.addClass('chzn-select')
.css({
'width': '330px',
'display': 'none'
});
そして、動作中の HTML バージョンでは:
<div id="objectiveBanksWrapper">
<span id="objectiveBanksLabel" class="label"></span>
<select id="objectiveBanks" name="objectiveBank" onchange="populateObjectives()" class="chzn-select" tabindex="2" style="width: 330px; display: none;"></select>
<span id=objectiveBanksLoader class="dropDownLoader"></span>
</div>