我有一个动态构建的页面,该页面通过ajax引入了许多元素。我想对特定下拉列表使用select2插件,该插件处于部分视图中,并且可以通过ajax加载到页面的多个不同区域中,特别是当用户单击按钮以在页面上添加新元素时页。我决定通过实例化所有select2
类实例来解决此问题。
function makeSelect2(){
$(this).select2();
}
$('.select2').each(makeSelect2);
$('body').on('DOMNodeInserted','.select2', makeSelect2);
上面的代码的问题是
.select2()
调用正在页面上生成新元素,这些元素正在冒泡并导致对makeSelect2
的更多调用。本质上,我陷入了无限循环。我在网上找到了一些使用livequery的示例,但这些示例似乎已经使用了几年,并且livequery一年没有更新过。
谢谢
最佳答案
我遇到过类似的问题,可以通过只选择select
标记,并在初始化后向它们添加一个类来解决,该类将作为标记来知道是否调用select2
函数:
function makeSelect2(){
if ($(this).hasClass('select2Init')) return;
$(this).addClass('select2Init').select2();
}
$('select.select2').each(makeSelect2);
$('body').on('DOMNodeInserted','select.select2', makeSelect2);