Как проверить, загружен ли плагин jQuery?
Есть ли способ проверить, доступен ли какой-либо плагин?
Представьте, что вы разрабатываете плагин, который зависит от загрузки другого плагина.
Например, я хочу, чтобы плагин jQuery Validation использовал библиотеку dateJS, чтобы проверить, действительна ли данная дата. Что было бы лучшим способом обнаружить в плагине jQuery Valdation, если бы датаJS была доступна?
- jQuery не-AJAX POST
- Твиттер Bootstrap Collapse Direction-Horizontal вместо вертикальной
- Firefox 4 Требуемая форма ввода RED border / outline
- Может кто-нибудь объяснить, как реализовать плагин загрузки файла jQuery?
- Счетчик jQuery для подсчета до целевого номера
- Как отключить масштабирование колесика мыши с помощью API Карт Google
- Правильный способ интеграции плагинов jQuery в AngularJS
- Установите ширину разделителя «Позиция: фиксированный» относительно родительского div
- Как расширить модуль загрузки Bootstrap Twitter
- jqGrid итерация по сетке Данные в подсети
- Загрузка файла jQuery: возможно ли инициировать загрузку с помощью кнопки отправки?
- Конфигурация поиска виджета jQuery UI Autocomplete
- Как запустить jQuery Fancybox при загрузке страницы?
Вообще говоря, плагины jQuery являются пространствами имен в области jQuery. Вы можете запустить простую проверку, чтобы увидеть, существует ли пространство имен:
if(jQuery().pluginName) { //run plugin dependent code }
dateJs, однако, не является плагином jQuery. Он изменяет / расширяет объект даты javascript и не добавляется как пространство имен jQuery. Вы можете проверить, существует ли какой-либо метод, например:
if(Date.today) { //Use the dateJS today() method }
Но вы можете столкнуться с проблемами, когда API перекрывает собственный API даты.
Если мы говорим о правильном плагине jQuery (на котором распространяется пространство имен fn), то правильным способом обнаружения плагина будет:
if(typeof $.fn.pluginname !== 'undefined') { ... }
Или потому, что каждый плагин в значительной степени гарантированно имеет некоторое значение, равное true, вы можете использовать более короткие
if ($.fn.pluginname) { ... }
BTW, $ и jQuery взаимозаменяемы, так как нечетная shell вокруг плагина демонстрирует:
(function($) { // })(jQuery))
закрытие
(function($) { // })
за ним немедленно следует вызов этого замыкания «передача» jQuery в качестве параметра
(jQuery)
$ в закрытии устанавливается равным jQuery
Чтобы обнаружить плагины jQuery, я нашел более точным использование скобок:
if(jQuery().pluginName) { //run plugin dependent code }
для плагинов, которые не используют пространство имен fn (например, pnotify), это работает:
if($.pluginname) { alert("plugin loaded"); } else { alert("plugin not loaded"); }
Это не работает:
if($.fn.pluginname)
Запустите это в своей консоли браузера.
if(jQuery().pluginName){console.log('bonjour');}
Если плагин существует, он будет распечатывать «bonjour» в качестве ответа в вашей консоли.
Такой подход должен работать.
var plugin_exists = true; try { // some code that requires that plugin here } catch(err) { plugin_exists = false; }
Я настоятельно рекомендую вам связать библиотеку DateJS с вашим плагином и документировать тот факт, что вы это сделали. Ничто не является более неприятным, чем необходимость поиска зависимостей.
Тем не менее, по юридическим причинам, вы не всегда сможете связать все. Также никогда не мешает быть осторожным и проверять наличие плагина, используя ответ Эрана Гальперина .
У jQuery есть метод, чтобы проверить, является ли что-то функцией
if ($.isFunction($.fn.dateJS)) { //your code using the plugin }
Ссылка на API: https://api.jquery.com/jQuery.isFunction/