隔离select2版本不起作用

时间:2018-05-27 17:44:56

标签: wordpress jquery-select2

我在我的WordPress插件上使用Select2,我需要隔离我加载的版本,以避免与使用Select2的其他插件发生冲突。

我在this answer找到了@Kevin Brown,他建议在加载后立即将select2函数保存到变量中,然后再删除它以避免其他加载问题:

<script src="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.0/js/select2.js"></script>

<script>
   var myOwnSelect2 = $.fn.select2;
   delete $.fn.select2;
</script>

我遇到的问题是它在edit-post.php页面中有效,但在其他任何地方都没有。我的意思是,&#34;选择&#34;标签/元素正在edit-post.php页面上被替换,但不在我的插件设置页面上。每个页面上的代码如下所示:

修改-post.php中

HTML

<div class="myplugin-metabox">
...
   <select name="_myplugin_item" class="searchable select2-hidden-accessible" data-placeholder="Select an item..." tabindex="-1" aria-hidden="true">
      <option>...</option>
   </select>
...
</div>

Javascript

myOwnSelect2.call( $('.myplugin-metabox select'), { dropdownAutoWidth: true, minimumResultsForSearch: Infinity } );

admin.php的?页=为myplugin

HTML

<div id="myplugin-settings">
...
   <select id="option-1" name="myplugin-option-1" class="">
      <option value="all">...</option>
      ...
   </select>
...
</div>

Javascript

myOwnSelect2.call( $('#myplugin-settings select'), { dropdownAutoWidth: true, minimumResultsForSearch: Infinity } );

如果我不使用任何隔离方法,我的插件中的所有内容都可以正常工作......但我需要隔离,因为许多其他流行的插件都会加载他们自己的Select2版本/副本。

Javascript初始化是在同一个文件上进行的。保持隔离,如果我删除edit-post.php选择的初始化,在我的插件设置页面上选择并不会转换为Select2下拉列表。

有关我可能做错的任何建议吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

嗯,我自己找到了问题的原因。我在这里写它,所以在我的情况下它可能对其他人有帮助。

当我将jQuery引用为“jQuery”时,我将jQuery引用为“$”。看看下面的代码:

不起作用(在我的情况下):     

<script>
   var myOwnSelect2 = $.fn.select2;
   delete $.fn.select2;
</script>

工作(在我的情况下):     

<script>
   var myOwnSelect2 = jQuery.fn.select2;
   delete jQuery.fn.select2;
</script>