初始化动态创建的select2

杰森

我有一个select2下拉菜单,为此我提供了一个匹配器功能。它是在初始页面加载时初始化的:

jQuery(document).ready(function() {
    jQuery(".my_select2").select2({
        matcher: function(term, text) {...}
    });
});

这可以在初始页面加载时找到。

现在,我还有其他的下拉列表(select动态创建的元素(通过AJAXjQuery(match).load(url)插入)。这些额外的下拉列表不会被初始化为select2小部件,这是可以理解的,即使它们与原始的select2选择器匹配也是如此。

因此,如何告诉jQuery将这些动态创建的select元素视为需要初始化的select2项?我可以在匹配元素上设置某种“监视”功能,以便每次将匹配元素添加到页面时都会启动select2初始化吗?

我记得live()前一段时间在jQuery中被介绍过,如果我正确理解的话,它支持在创建匹配元素之前。我从未使用过该功能,现在似乎已弃用。但这确实像我正在寻找的东西。

这是针对WordPress插件的,目前使用jQuery v1.11.2。

胡安

您可以尝试DOMNodeInserted并为其选择select或class

演示版

$('body').on('DOMNodeInserted', 'select', function () {
    $(this).select2();
});

更新

DOMNodeInserted

不推荐使用此功能已从Web标准中删除。尽管某些浏览器可能仍支持它,但是它正在被删除。避免使用它,并尽可能更新现有代码;

建议的方法将是这样的 MutationObserver

$(function() {
  $("button").on("click", function() {
    $("#dynamic-container").append($("<select><option>test</option><select/>"));
  });

  // select the target node
  var target = document.getElementById('dynamic-container');

  if (target) {
    // create an observer instance
    var observer = new MutationObserver(function(mutations) {
      //loop through the detected mutations(added controls)
      mutations.forEach(function(mutation) {
      //addedNodes contains all detected new controls
        if (mutation && mutation.addedNodes) {
          mutation.addedNodes.forEach(function(elm) {
          //only apply select2 to select elements
            if (elm && elm.nodeName === "SELECT") {
              $(elm).select2();
            }
          });
        }
      });
    }); 
    
    // pass in the target node, as well as the observer options
    observer.observe(target, {
      childList: true
    });

    // later, you can stop observing
    //observer.disconnect();
  }
});
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script><link href="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.0/css/select2.min.css" rel="stylesheet"/>
<script src="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.0/js/select2.min.js"></script>


<button>Add new select</button>
  <div id="dynamic-container">

  </div>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Ajax动态创建Select2时不会在引导程序模式中进行初始化

来自分类Dev

如何初始化select2已禁用

来自分类Dev

Select2初始化回调

来自分类Dev

重新初始化select2数据

来自分类Dev

在select2中初始化多个选择

来自分类Dev

如何使用select2初始化默认值并触发ajax请求(select2:select)?

来自分类Dev

创建动态数组并初始化

来自分类Dev

select2中的预加载值,其中多个select2被同一类初始化

来自分类Dev

初始化Select2引发定义未定义错误

来自分类Dev

在jQuery datepicker上初始化select2下拉列表

来自分类Dev

如果由类初始化,则 select2 触发两次

来自分类Dev

初始化动态创建的 redux-form 字段

来自分类Dev

如何在带有select2初始化的输入框上设置默认值?

来自分类Dev

动态初始化对象

来自分类Dev

动态初始化常量

来自分类Dev

初始化动态数组

来自分类Dev

动态初始化代码

来自分类Dev

动态初始化JTree

来自分类Dev

动态初始化对象

来自分类Dev

如何设置属性到动态创建的jQuery select2?

来自分类Dev

静态和动态初始化示例

来自分类Dev

初始化本地与动态DateTime变量

来自分类Dev

动态初始化iset <t>

来自分类Dev

动态初始化特征范围对象

来自分类Dev

动态内存初始化C ++

来自分类Dev

动态初始化Windows窗体对象

来自分类Dev

初始化动态添加的Google Map

来自分类Dev

本征动态矩阵初始化

来自分类Dev

初始化动态VHDL阵列