ajax 页面加载后 Select2 将无法工作(呈现)

Select2 won't work (render) after ajax page load

我有使用 select2 插件的页面:

$(function() {
    if($('.su-tech').length) {
        $('.su-tech').select2({
            allowClear: true,
            width: '100%'
        });
    }
});

和 html 代码如下:

<select class="select2 su-tech" style="width:100%;">                                                    
    <option value="1" >option1</option>
    <option value="2" >option2</option>
    <option value="3" >option3</option>
</select>

我还使用 ajax 加载 html 内容 jQuery:

$(document).on("click", "#page1", function () {
    $.ajax({
        type: 'POST',
        url: "/example-page1",
        success: function (result) {
            $('.ajax_content').html(result);
        },
    })
})

在这种情况下,我的 select2 不会呈现,也不会工作。如何使用 ajax 内容加载呈现插件。

问题是您正在 .ajax_content 中重新创建 DOM。要解决此问题,您可以创建一个 initialize 函数并为所有需要在 DOM 上初始化的控件添加代码,如下所示

function Initialize()
{
    if($('.su-tech').length) {
            $('.su-tech').select2({
                allowClear: true,
                width: '100%'
            });
    }
} 

然后在每个 Ajax 请求成功时调用此函数,如下所示

$(document).on("click", "#page1", function () {
    $.ajax({
        type: 'POST',
        url: "/example-page1",
        success: function (result) {
            $('.ajax_content').html(result);
            Initialize(); // after the HTML update
        },
    })
})

希望这对你有用