2016-06-19 16 views
1

私がしていること:モーダルポップアップが開くと、選択ボックスにオプションを動的に追加します。そして、on changeトリガーが応答するのを待つ。Select2は最初のオプションの変更/選択時にトリガーしません

観測:すべてのオプションの警告ボックスが最初に表示されます。 以下はそのコードです。

$("#query_product").on("change", function(e){ 
    alert(1) 
}); 

$("#add_condition_modal").on("shown.bs.modal", function() { 
    options = ['<option>one</option>','<option>two</option>','<option>three</option>'] 
    $('#query_product').find('option').remove() 
    $('#query_product').append(options); 
}); 

<select id="query_product" name="query_product" required></select> 

別の観察:私は同じオプションを持つHTMLのselectボックスを事前入力してから最初のオプションまたはいずれかのオプションを選択した場合、私は警告ポップアップを参照してください。 今私は混乱しています。

動的に追加された要素にイベントデリゲートを使用しようとしました。

$(document).on("change","#query_product", function() { 

何も動作していないようです。どんな助けもありがとう。 TIA

答えて

2

はこれを試してみてください役立つかもしれないフィドルです:。

$("#query_product").on("change", function(e){ 
    alert(1) 
}); 

$("#add_condition_modal").on("shown.bs.modal", function() { 
    options = ['<option value="one">one</option>','<option value="two">two</option>','<option value="three">three</option>'] 
    $('#query_product').find('option').remove(); 
    $('#query_product').append(options); 
    $('#query_product').val(""); 
}); 

<select id="query_product" name="query_product" required></select> 
+0

ありがとう、これは動作します。しかし、ボックスを選択するために空のvalを設定する必要がある理由を説明できますか?私は本当に知りたいです –

+1

それは、変更イベントがトリガーできるように、選択ボックスの値をリセットすることでした。 –

1

ここでは、間違っていると思います。

['<option>one</option>','<option>two</option>','<option>three</option>']
文字列を使用することをおすすめします。

$("#query_product").on("change", function(e){ 
    alert(1) 
}); 

$("#add_condition_modal").on("shown.bs.modal", function() { 
    options ='<option>one</option><option>two</option><option>three</option>'; 
    $('#query_product').html(options); 
}); 

<select id="query_product" name="query_product" required></select> 

あなたはそれは同様SELECT2を削除remove() jQueryの機能を使用しています。 あなたのために再初期化が修正されるでしょう。

:オプションの配列を使用する場合は、このようにします。

var options = ['first_option','second_option','third_option']; 
var optionString = ''; 
    for(var i = 0; i< options.length; i++){ 
     optionString += '<option>'+options[i]+'</option>'; 
    } 
then $('#selector').html(optionString); 

ここ https://jsfiddle.net/imrealashu/61tvh76t/3/

+0

いや、 '$( '#のquery_product')コメントアウトは( 'オプション')を見つける削除(。 ) '..まだ同じ結果 –

+0

あなたはそれを再初期化しようとしましたか? '$( '#query_product')。( 'option')。remove()'を削除するのではなく、$( '#query_product')。 – imrealashu

+0

私はあなたのためのフィドルを作成させてください。 – imrealashu

関連する問題