将 select2 添加到动态添加的元素

Posted

技术标签:

【中文标题】将 select2 添加到动态添加的元素【英文标题】:add select2 to dyanamically added element 【发布时间】:2021-06-15 21:36:51 【问题描述】:

我正在尝试将 select2 js 应用到我动态创建的元素中,谁能帮我解决这个问题

var a_html = '<div class="card skill_card"><div class="card-body media align-items-center"><div class="media-left mr-3"><span class="js-dragula-handle material-icons" style="cursor: move;">drag_handle</span></div><div class="media-body">' + '<a href="#<%=@pathn%>"><strong><%= @pathn %></strong></a>' + '</div><div class="media-right"><a href="" class="btn btn-flush ml-12pt" type="button" data-toggle="tooltip" data-title="Delete Path" data-placement="bottom" data-caret="false"><i class="material-icons icon-16pt">delete_outline</i></a></div></div></div>'

$(a_html).appendTo(".path_panel");

$('.path_list').append('<div id="<%= @pathn -%>"></div>');
<% js = escape_javascript(render(partial: 'admin/programmes/path', locals:  pathn: @pathn )) %>
$("#"+"<%= @pathn -%>").append("<%= js %>");
$("#"+"<%= @pathn -%>").find(".custom-select").select2();

部分页面代码--- _path.html.erb

        <div class="form-group d-flex align-items-end mb-16pt">
        <div class="form-group col-lg-8 mb-8pt pl-0">
            <label class="form-label" for="select03">Add Examples Tech</label>
            <p class="text-left">Description.</p>
            <select id="skill_select" data-toggle="select" multiple class="form-control custom-select" data-path="<%=@pathn%>">
                <%skills_data = skills_data ? skills_data : Org.skills_and_technologies%>
                <% skills_data.each do |sk| %>
                <option title="<%= "#sk.klass_#sk.id" %>"><%= sk.name.capitalize %></option>
                <% end %>
            </select>               
        </div>
        <div class=""><%= submit_tag "Add", :name => nil, class: "btn btn-accent btn-rounded mb-8pt ml-16pt add_skill", id: @pathn %></div>
    </div>

【问题讨论】:

如果您在 js 模板中执行它失败时,您不会在浏览器控制台中收到任何错误。你确定没有错误?代码看起来不错.. @razvans 没有错误,只是 select2 没有应用于选择框 试试setTimeout(function() $("#"+"&lt;%= @pathn -%&gt;").find(".custom-select").select2() , 0),虽然它没有意义,因为追加是同步的。 您能否分享添加.custom-select 的代码,因为我无法在给定代码中找到任何具有该名称的类。如果它在另一个文件中,那么它可能是在执行 js 之后添加的。 @AbdulRehman 我添加了部分内容,您可以在其中找到“自定义选择” 【参考方案1】:

唯一想到的是,如果整个 js 模板没有错误,浏览器在append 之后看不到.custom-select

AFAIK append 是同步的,应该应用选择。请试试这个:

setTimeout(function() 
  $("#"+"<%= @pathn -%>").find(".custom-select").select2() 
, 0)

【讨论】:

以上是关于将 select2 添加到动态添加的元素的主要内容,如果未能解决你的问题,请参考以下文章

动态添加选项到 select2

Select2动态添加图像图标到选项

使用格式动态设置 select2 选项

如何在 ASP .NET MVC 5 中使用 select2 将新值动态添加到列表框并将其传递给控制器​​?

在 Select2 中动态添加选项和 optgroup

Select2 Dropdown 动态添加、删除和刷新项目