Изолировать версию select2 не работает - PullRequest
0 голосов
/ 27 мая 2018

Я использую Select2 в своем плагине WordPress, и мне нужно изолировать загруженную версию, чтобы избежать конфликтов с другими плагинами, также использующими Select2.

Я нашел этот ответ @ Кевин Браун , где он предлагает сохранить функцию 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, но не где-либо еще.Я имею в виду, что «выбрать» теги / элементы заменяются на страницах edit-post.php, но не на странице настроек моего плагина.Код на каждой странице выглядит следующим образом:

edit-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? Page = 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 голосов
/ 04 июня 2018

Ну, я сам нашел причину проблемы.Я пишу это здесь, чтобы это могло помочь другим в моей ситуации.

Дело в том, что я ссылался на jQuery как «$», когда я должен был ссылаться на него как «jQuery».Проверьте код ниже:

Не работает (в моем случае) :

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

Работает (в моем случае) :

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