Comment puis-je vérifier si un plugin jQuery est chargé?
Est-il un moyen de vérifier si un plugin est disponible?
Imaginez que vous êtes l'élaboration d'un plugin qui dépend d'un autre plugin en cours de chargement.
Par exemple je veux le plugin jQuery Validation d'utiliser le dateJS bibliothèque pour vérifier si une date donnée est valide. Quelle serait la meilleure façon de détecter, dans le jQuery Valdation plugin si le dateJS était disponible?
Vous devez vous connecter pour publier un commentaire.
Généralement parlant, les plugins jQuery, sont des espaces de noms sur le jQuery portée. Vous pouvez exécuter une façon simple de vérifier pour voir si l'espace de noms existe:
dateJs n'est cependant pas un plugin jQuery. Il modifie/s'étend de l'objet date javascript, et n'est pas ajouté comme un espace jQuery. Vous pouvez vérifier si la méthode que vous avez besoin, par exemple:
Mais vous pouvez rencontrer des problèmes lorsque l'API chevauche la Date natif de l'API.
if ($.isFunction(jQuery.fn.pluginName)) { ... }
permettra également de s'assurer qu'il est au moins une fonction.window.jQuery
est pas définie, le rappel ne sera pas exécuté, il fonctionne bien, mais maintenant je suis tring pour charger un j extension de requête et de vérifier , j'ai besoin d'appeler jquery sélectionnez la fonction commejQuery().pluginName
, mais lorsque je passe ma fonction de paramètres commeLoadScript("jquery+plugin.js",jquery().plugin)
jquery() dose existait pas encore.Si nous parlons d'un bon plugin jQuery (celle qui s'étend de la fn de l'espace de noms), puis à la bonne façon de détecter le plugin serait:
Ou parce que chaque plugin est presque garanti d'avoir une valeur qui correspond à la valeur true, vous pouvez utiliser la plus courte
BTW, l' $ et jQuery sont interchangeables, comme l'étrange wrapper autour d'un plugin montre:
la fermeture
est immédiatement suivie par un appel à la fermeture "passer" jQuery que le paramètre
l' $ à la clôture est égale à jQuery
function isPluginLoaded(plugin) { return !!$.fn[plugin] }
if(typeof $.fn.pluginname != 'undefined')
$
etjQuery
ne sont pas toujours interchangeables, comme jQuery peut être (comme WordPress) chargé dans no-conflit mode. Cela m'a causé de toujours utiliser le raccourci, d'absence de conflit sûr document prêt:jQuery(function($) { // $ is safe in here.... });
ou, comme vous le soulignez, la fermeture modèle:(function($) { // $ is safe in here.... })(jQuery);
, selon mes envies / besoins. (BTW, upvoted, comme la vérification de vous recommander, c'est celui que je préfère)Pour détecter les plugins jQuery, j'ai trouvé de plus précis d'utiliser les parenthèses:
pour les plugins qui n'utilise pas du fn espace de noms (par exemple pnotify), cela fonctionne:
Cela ne fonctionne pas:
jQuery a une méthode pour vérifier si quelque chose est une fonction
De référence de l'API: https://api.jquery.com/jQuery.isFunction/
Je recommande fortement que vous le bundle de la DateJS bibliothèque avec votre plugin et de documenter le fait que vous l'avez fait. Rien n'est plus frustrant que d'avoir à traquer les dépendances.
Cela dit, pour des raisons légales, vous ne pouvez pas toujours être en mesure de regrouper tout. Elle aussi ne fait jamais de mal d'être prudent et de vérifier l'existence du plugin à l'aide de Eran Galperin réponse.
Exécuter cette dans votre navigateur de la console de son choix.
if(jQuery().pluginName){console.log('bonjour');}
Si le plugin existe, il permet d'imprimer un "bonjour" comme une réponse à votre console.
Ce type de démarche devrait fonctionner.