3

我在做什么:在模式弹出窗口打开时向选择框动态添加选项。并等待on change触发器响应。

观察:它会弹出除第一个选项之外的所有选项的警报框。下面是代码。

$("#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 选择框,然后选择第一个选项或任何选项时,我会看到警报弹出窗口。现在我很困惑。

我尝试使用事件委托来动态添加元素。

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

似乎没有任何效果。任何帮助将不胜感激。TIA

4

2 回答 2

3

尝试这个:

$("#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>
于 2016-06-19T18:16:02.750 回答
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>

当您使用remove()jQuery 函数时,它也会删除 select2。所以重新初始化会为你解决。

注意:如果您想使用选项数组,请这样做。

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/

于 2016-06-19T17:47:02.873 回答