无法在动态添加的元素上显示 mCustomScrollBar

Posted

技术标签:

【中文标题】无法在动态添加的元素上显示 mCustomScrollBar【英文标题】:Unable to show mCustomScrollBar on dynamically added elements 【发布时间】:2019-03-03 01:28:36 【问题描述】:

我有一个 div <div id="MetricsTypeYearModelList"></div> 。在这个 div 中,我动态添加了一个 ul 元素

$("#MetricsTypeYearModelList").append('<ul class="modal__list mCustomScrollbar" id="MetricsTypeYearModelListUl"></ul>');

在此之后,我循环一个 JSON 对象并将 li 元素动态添加到 ul 元素

for (var i = 0; i < metricsTypeYearModel.length; i++)
    
        var obj = metricsTypeYearModel[i];
        $("#MetricsTypeYearModelListUl").append('<li data-name='+obj.ModelTypeName+' data-value='+obj.ModelTypeID+' data-id='+obj.ModelTypeID+' class="pModel"><a href="#"> '+obj.ModelTypeName+'</a></li>');
    

我在我的 ul 元素中使用了“mCustomScrollbar”类,但这并没有显示出来,正常的滚动条会显示出来。如何显示 CustomScrollBar

【问题讨论】:

请注意,当您附加 &lt;ul&gt; 元素时,您将附加一个 id 到它。然后,您继续在同一 &lt;ul&gt; 元素上创建另一个附加逻辑,该元素将 id 作为您的选择器。注意 id 是一个 unique 选择器。因此,您的 $("#MetricsTypeYearModelListUl").append() 只会应用于它找到的具有相关 id 的第一个元素。 【参考方案1】:

您可以将live 配置属性设置为true 以定位动态添加到DOM 的元素。

所以

$(".mCustomScrollbar").mCustomScrollbar(
    live:true // add this after your existing config options
);

或者,在这种情况下可能是更好的选择,只需在新添加​​的元素上手动调用mCustomScrollbar,然后将内容添加到它。

for (var i = 0; i < metricsTypeYearModel.length; i++)
    
        var obj = metricsTypeYearModel[i];
        $("#MetricsTypeYearModelListUl").append('<li data-name='+obj.ModelTypeName+' data-value='+obj.ModelTypeID+' data-id='+obj.ModelTypeID+' class="pModel"><a href="#"> '+obj.ModelTypeName+'</a></li>');
    

$('#MetricsTypeYearModelListUl').mCustomScrollbar();

【讨论】:

完成了第二种方法,感谢@Gabriele Petrioli

以上是关于无法在动态添加的元素上显示 mCustomScrollBar的主要内容,如果未能解决你的问题,请参考以下文章

在动态创建的元素上添加事件监听器

Extjs 无法在表单面板中动态添加/删除字段

Bootstrap Select - 在动态添加的元素上重新初始化

动态添加元素上的 X-Editable 引导插件“隐藏”事件问题

如何在角度2中显示动态添加的组件列表

为啥 angular.js 在添加动态元素时不够聪明,无法编译 DOM?