You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为动态新增的select下拉框添加select2功能

问题根因

  • 初始化选择器匹配规则问题:你代码中初始化select2用的选择器是.js,但动态生成的下拉框没有添加js类,自然不会被初始化规则命中。
  • 动态DOM初始化时机问题:$(document).ready()中的初始化逻辑仅在页面首次加载完成时执行一次,后续通过JS动态插入到页面的下拉框没有经过select2初始化,不会自动加载对应效果。

解决方案

统一给需要加载select2效果的下拉框添加专属标识类,页面初始化时初始化已有的下拉框,每次新增下拉框后单独对新增元素执行初始化即可,修改后的完整代码如下:

静态HTML部分(给select添加专属类select2-project):

<table class="table" id="dynamicTable12" style="width: 50%">
    <tr>
        <th scope="col" span="1" style="width: 25%;" >projects</th>
    </tr>
    <tr>
        <td> 
            <select name="addmore1[0][project]" class="form-control select2-project" id="state" required="required">
                <option value="">-- Select Project --</option>
                <option value="A">A</option>
                <option value="B">B</option>
            </select>
        </td>  
        <td><button type="button" name="add" id="add12" class="btn btn-success">Add More</button></td>  
    </tr>
</table>

JS部分修改:

var i = 0;
$("#add12").click(function(){
    ++i;
    // 先构造新行DOM对象
    var newTr = $('<tr><td><select name="addmore1['+i+'][project]" class="form-control select2-project" required="required"><option value="">-- Select Project --</option> <option value="A">A</option><option value="B">B</option></select></td><td><button type="button" class="btn btn-danger remove-tr">Remove</button></td></tr>');
    // 插入新行到表格
    $("#dynamicTable12").append(newTr);
    // 单独给新行内的select初始化select2
    newTr.find('.select2-project').select2({
        width: '100%' // 可选,避免下拉框宽度错位
    });
});
$(document).on('click', '.remove-tr', function(){  
     $(this).parents('tr').remove();
}); 

$(document).ready(function() {
    // 初始化页面已有的select2下拉框
    $('.select2-project').select2({
        width: '100%'
    });
});

内容的提问来源于stack exchange,提问作者Thimothi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 00:54:01