我有一个select2下拉列表,我为它提供了一个matcher函数,它在初始页面加载时是这样初始化的:
jQuery(document).ready(function() {
jQuery(".my_select2").select2({
matcher: function(term, text) {...}
});
});
这在初始页面加载时有效。
现在,我有了额外的下拉菜单(动态创建的select
元素)(通过 AJAX 拉入,即jQuery(match).load(url)
)。这些额外的下拉菜单没有初始化为选择2小部件,这是可以理解的,即使它们与原始的选择2选择器匹配。
那么,如何让jQuery将这些动态创建的select
元素视为需要初始化的select2项呢?我是否可以对匹配的元素设置某种“监视”,以便每次向页面添加匹配的元素时,select2初始化都会启动?
我记得不久前在jQuery中引入了live()
,如果我理解正确的话,它支持在创建元素之前匹配元素。我从来没有使用过这个特性,现在它似乎被弃用了。但它确实感觉像是我正在寻找的那种东西。
这是一个WordPress插件,目前使用jQuery v1.11.2。
7条答案
按热度按时间ewm0tg9j1#
您可以尝试使用
DOMNodeInserted
并查找select或您要分配给它们的类DOMNodeInserted
对于
MutationObserver
,建议的方法如下所示x一个一个一个一个x一个一个二个x
kxkpmulp2#
我最近遇到了类似的情况,但我用了一种非常平常的方式:
如果是. load函数,则查找要在load函数回调中初始化的所有选择元素,并对每个选择元素调用initializeSelect2。
我希望这对正在寻找简单解决方案的人有所帮助。
2nc8po8w3#
对我很有效
efzxgjgh4#
我也面临过同样的问题,但在挠头几天后,我找到了一个解决方案,但如果你期望良好的性能,它不是很好。
因此,当DOM第一次加载时,无论加载什么选择项,都将具有select 2功能。对于动态生成的字段,select 2功能将不可用,因为select 2脚本已经加载。
因此,要使select 2工作,请在单击时动态重新加载脚本。
它所做的是将select 2功能添加到$中。
s4chpxco5#
与上述答案相似:
kkih6yb86#
要添加到其他答案,如果应用于,select2可能会返回奇怪的结果
1.隐藏选择
或
1.选择具有相同ID的
要不应用于隐藏元素,请使用
:visible
选择器。如果动态生成元素,请确保id
和data-select2-id
是唯一的(也可以将其删除)。nr7wwzry7#
我的解决方案和roshan的类似,但是没有在函数中传递select对象,这是一个 AJAX 调用的表输出。
抱歉留下了无关的东西-我评论了感兴趣的领域。希望这对其他人有帮助!