我在我的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下拉列表。
有关我可能做错的任何建议吗?
谢谢!
答案 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>