2008-12-30 48 views
199

有什么方法可以检查一个特定的插件是否可用?如何检查jQuery插件是否已加载?

想象一下,您正在开发一个取决于正在加载的另一个插件的插件。

例如,我希望jQuery Validation插件使用dateJS库来检查给定日期是否有效。如果dateJS可用,在jQuery Valuation插件中检测的最佳方法是什么?

+1

类似的问题[?如何检查jQuery插件和功能存在(http://stackoverflow.com/q/5339876/782535) – 2013-04-25 05:24:25

+0

[详细文章检查jQuery或jQuery插件是否加载](http://conceptf1.blogspot.com/2013/11/jquery-library-loaded-or-not-validation.html) – 2013-11-16 09:17:59

回答

316

一般来说,jQuery插件是jQuery作用域上的命名空间。你可以运行一个简单的检查,看看是否存在命名空间:然而

if(jQuery().pluginName) { 
    //run plugin dependent code 
} 

dateJs不是一个jQuery插件。它修改/扩展了javascript日期对象,并且不作为jQuery名称空间添加。您可以检查您需要的方法是否存在,例如:

if(Date.today) { 
     //Use the dateJS today() method 
} 

但是,您可能会遇到API与本机Date API重叠的问题。

+54

NOTHER选项 – Nagyman 2010-06-16 14:55:54

+5

也许有点矫枉过正,但`if($ .isFunction(jQuery.fn.pluginName)){...}`也将确保它至少是一个函数。 – Noyo 2013-09-03 17:46:52

1

这种方法应该工作。

var plugin_exists = true; 

try { 
    // some code that requires that plugin here 
} catch(err) { 
    plugin_exists = false; 
} 
+3

如果(jQuery.fn.pluginName){...}是一个可以轻松检测到 – pwdst 2014-12-10 15:28:51

1

我强烈建议您将DateJS库与您的插件捆绑在一起,并记录您已经完成的事实。没有什么比寻找依赖关系更令人沮丧了。

这就是说,出于法律方面的原因,你可能并不总是能够捆绑所有东西。使用Eran Galperin's answer也绝不会因为谨慎而检查插件的存在。

11

要检测的jQuery插件,我发现用括号更准确:

if(jQuery().pluginName) { 
    //run plugin dependent code 
} 
82

如果我们谈论的是一个正确的jQuery插件(在延伸的FN命名空间),那么检测的正确方法插件是:

if(typeof $.fn.pluginname !== 'undefined') { ... } 

还是因为每一个插件是相当多保证有这相当于真正的某个值,则可以使用更短的

if ($.fn.pluginname) { ... } 

顺便说一句,在$和jQuery是可以互换的,围绕一个插件看起来很奇怪的包装证明:

(function($) { 
    // 
})(jQuery)) 

关闭

(function($) { 
    // 
}) 

由该关闭呼叫紧跟“传球'jQuery的作为

(jQuery) 

在封闭的$被设定为等于jQuery的

参数
7

为不使用Fn命名空间(例如pnotify)的插件,这个工程:

if($.pluginname) { 
    alert("plugin loaded"); 
} else { 
    alert("plugin not loaded"); 
} 

这不起作用:

if($.fn.pluginname) 
2

运行此在您选择的浏览器控制台。

if(jQuery().pluginName){console.log('bonjour');}

如果插件存在,它会打印出“卓悦”作为您的控制台响应。

相关问题