【问题标题】:Select2 not displayed when added dynamically for the first time首次动态添加时不显示select2
【发布时间】:2016-10-18 16:34:57
【问题描述】:

我正在使用 Jquery,我有一个用例可以在单击按钮时动态添加一些元素。

动态添加'select'时,第一次点击add按钮时不会显示select2,而是显示一个简单的'select',当我们再次点击add按钮时,之前的所有' select' 格式化为 select2。

我需要当我们点击添加按钮时,第一个生成的选择也应该得到 select2。

以下是脚本:

var container = $(document.createElement('div')).css({
        padding: '5px', margin: '20px', width: '400px', border: '1px solid',
        borderTopColor: '#999', float: 'left', borderBottomColor: '#999',
        borderLeftColor: '#999', borderRightColor: '#999'
    });

var iCnt = 0;
function add()
{
        if (iCnt <= 19) {

            iCnt = iCnt + 1;

    $(container).append($("<select class ='selinput' id=tb" + iCnt + " " + "value='Text Element " + iCnt + "' style='float : left; margin-right:70px;'>")); 

    //Add Property Selector

    $(container).append("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");     
    $(container).append($("<select class ='selinput2" + iCnt + "'' id=tb2" + iCnt + " " + "value='Text Element " + iCnt + " ' ><option value='equalto'>A</option><option value='notequalto'>B</option></select>"));

    $(container).append("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");     
            // ADD TEXTBOX.
    $('select').select2({width : '20%'});
            $(container).append('<input type=text class="input" id=tbtext' + iCnt + ' ' +
                        'placeholder="Value ' + iCnt + '" style="float : center;" /><br><br>');


            // SHOW SUBMIT BUTTON IF ATLEAST "1" ELEMENT HAS BEEN CREATED.
            if (iCnt == 1) {

                var divSubmit = $(document.createElement('div'));
                $(divSubmit).append('<input type=button class="bt"' + 
                    'onclick="GetTextValue()"' + 
                        'id=btSubmit value=Submit />');

            }

            // ADD BOTH THE DIV ELEMENTS TO THE "main" CONTAINER.
            $('#main').after(container, divSubmit);
        }
        // AFTER REACHING THE SPECIFIED LIMIT, DISABLE THE "ADD" BUTTON.
        // (20 IS THE LIMIT WE HAVE SET)
        else {
            $(container).append('<label>Reached the limit</label>'); 
            $('#btAdd').attr('class', 'bt-disable'); 
            $('#btAdd').attr('disabled', 'disabled');
        }
    }

以下是js fiddle的链接:

https://jsfiddle.net/hns0qk2b/43/

请指教。

【问题讨论】:

    标签: javascript jquery html


    【解决方案1】:

    您唯一的问题是您需要在初始化 select2 之前将新元素添加到 DOM。先将元素添加到 DOM,然后你的代码就可以工作了。

    // ADD BOTH THE DIV ELEMENTS TO THE "main" CONTAINER.
    $('#main').after(container, divSubmit);
    
    // Initialize select2
    $('select').select2({width : '20%'});   
    

    查看应用于小提琴的这些更改: https://jsfiddle.net/zjafvr3u/1/

    【讨论】:

      猜你喜欢
      • 2015-05-10
      • 2018-09-02
      • 2019-03-25
      • 2017-07-08
      • 2017-11-28
      • 2015-09-20
      • 1970-01-01
      • 1970-01-01
      • 2018-06-12
      相关资源
      最近更新 更多