Bootstrap-Select不响应动态添加的行/内容

时间:2016-02-23 21:40:34

标签: jquery bootstrap-select

我有一个包含多个选择框的表格行,用于表单输入。

然后我可以克隆该行来创建一个新行。喜欢这个。

var counter = 1;
$(document).ready(function() {
    $('#addItemRow').click(function() {
          $('#itemMultiInputTable tr:last').clone(true,true).insertAfter('#itemMultiInputTable tr:last');

        $('[id^=item_number]:last').attr('id', 'item_number' + counter);
        $('[name^=item_number]:last').attr('name', 'item_number' + counter);

        $('[id^=select_product]:last').attr('id', 'select_product' + counter);
        $('[name^=select_product]:last').attr('name', 'select_product' + counter);

        $('.selectpicker').selectpicker('refresh');
        counter += 1;                   
        return false;                   
    });                                 
});    

但是在动态创建的行中,任何'选择'框中有选择选择框下拉。但是当我更改第二个+选择框中的值时,它只会更改第一行上的值。

如果它的第2行或第3行或其他什么都没关系。当我更改selectpicker选择框时。只有第1行会更新。行2+始终保持默认值。

就像它们都绑定到第一行,而不是它们的新(动态添加)行。

我做错了什么?

谢谢!

1 个答案:

答案 0 :(得分:4)

找到答案,至少对我有用。看来我有两个问题。

1)根据'问题' bootstrap-select found here我了解到bootstrap select会添加一个div类来替换你的选择框。您必须先删除该类,然后才能执行任何操作。然后,您必须刷新/重新初始化已添加的新行上的引导选择。

2)最初在完成所有这些之后,我仍然无法让它发挥作用。原来这是我的克隆(真实,真实)。我假设你想把事件处理程序带到新行。我猜不会。看来,当您克隆事件处理程序时,它会将所有内容绑定到第一行。所以改变它只是clone()解决了我的问题。

对于任何可能遇到类似问题的人来说,这是我现在正在运行的代码(至少在firefox中)。

var counter = 1;
$(document).ready(function() {
   $('#addItemRow').click(function() {

      // Fix this clone() part - must NOT be clone(true,true)
      $('#itemMultiInputTable tr:last').clone().insertAfter('#itemMultiInputTable tr:last');

    $('[id^="item_number"]:last').attr('id', 'item_number' + counter);
    $('[name^="item_number"]:last').attr('name', 'item_number' + counter);

    $('[id^="select_product"]:last').attr('id', 'select_product' + counter);
    $('[name^="select_product"]:last').attr('name', 'select_product' + counter);

    // These are the two key lines to making it work
    $('#itemMultiInputTable tr:last').find('.bootstrap-select').replaceWith(function() { return $('select', this); });
    $('.selectpicker').selectpicker('refresh');
    counter += 1;                   
    return false;                   
 });                                 
});    

我还要注意,这适用于我在表单中的所有3个选择字段。我不必单独解决每个问题,因为它只是取代了选择'领域。克隆函数为每个字段提供正确的数据。

我自己一直在自我教学,所以如果有人注意到我可以做得更好,我总是渴望学习。

感谢。