【发布时间】:2015-07-10 10:20:43
【问题描述】:
我有一个 select2 下拉菜单,为此我提供了一个匹配器功能。它在初始页面加载时初始化如下:
jQuery(document).ready(function() {
jQuery(".my_select2").select2({
matcher: function(term, text) {...}
});
});
这可以在初始页面加载时找到。
现在,我有额外的下拉菜单(select 动态创建的元素(通过 AJAX 引入,即 jQuery(match).load(url)。这些额外的下拉菜单不会被初始化为 select2 小部件,这是可以理解的,即使它们匹配原来的 select2 选择器。
那么,我如何告诉 jQuery 将这些动态创建的 select 元素视为需要初始化的 select2 项?我可以在匹配元素上设置某种“监视”,以便每次将匹配元素添加到页面时都会启动 select2 初始化?
我记得live() 前段时间在 jQuery 中被引入,如果我理解正确的话,它支持在创建之前匹配元素。我从未使用过该功能,现在它似乎已被弃用。但这确实是我正在寻找的那种东西。
这是一个WordPress插件,目前使用jQuery v1.11.2。
【问题讨论】:
-
这意味着 jQuery 在没有帮助器的情况下无法监视正在创建的项目。或者
arrive.js是为了在根本不使用 jQuery 时让事情变得更容易而创建的? -
如果在将选择项添加到 DOM 后无法触发 select2,则必须像第一条评论一样使用 dom 变异观察器
-
谢谢,我现在采用这种方法 - 在将新的选择列表添加到 DOM 时显式触发 select2。这意味着列表有两个初始化位置,但我已将所有初始化代码移至函数以将重复降至最低。我认为我的第一个想法是新元素的初始化可以自动化,有点乐观。它可以完成,如 juna-c 的回答所示,但它确实依赖于一些更现代的浏览器中的功能,在这个应用程序中假设/强制最终用户是不合理的(商店 - 所有客户都很重要)。
标签: jquery jquery-select2