有没有办法在我的脚本中直接调用jQuery插件中定义的方法?
更新
(function($){
$.fn.myPlugin = function (options) {
return this.each(function() {
function doSomething() {
// do something
}
function doSomethingElse() {
// do something else
}
doSomething();
doSomethingElse();
});
}
})(window.jQuery);
现在我想从我的脚本中调用doSomethingElse()。有没有办法做到这一点?
答案 0 :(得分:4)
你问题的直接答案是“不”。发布后,代码明确地隐藏了来自外部世界的那些功能。
使这些功能可用的一种jQuery方法是以不同方式定义它们。就个人而言,我喜欢创建具有相应“全局”对象的插件,所以如果我有
$.fn.pointy = function() {
// plugin
}
我也会:
$.pointy = {
something: function() { ... },
somethingElse: function() { ... }
}
这对提供相关实用程序和配置API都很好。因此,您可以将“doSomething”函数放在那里,然后通过将名称限定为$.myPlugin.doSomething()
在插件中使用它们。当然,您也可以创建插件初始化中的函数,这样它们可能是可以访问其他私有函数的闭包。
答案 1 :(得分:2)
在我看来,当你需要从外面打电话时,最好使用事件系统。 以下是您的代码的结果:
(function($){
$.fn.myPlugin = function (options) {
return this.each(function() {
var $this = $(this);
$this.on('doSomething', function() {
// do something
}
$this.on('doSomethingElse', function() {
// do something else
}
$this.trigger('doSomethingElse');
$this.trigger('doSomething');
});
}
})(window.jQuery);
或用同样的方法从外面打电话:
$('.myPluginDiv').trigger('doSomethingElse');
$('.myPluginDiv').trigger('doSomething');
答案 2 :(得分:0)
我不是100%肯定我能得到你,但是在定义一个新函数之后你仍然可以在jQuery Selection之外调用它,参见:
$.fn.myfunc = function(){
alert('foo');
}
$.fn.myfunc(); // works
$('#something').myfunc(); // works too
所以你必须确切地知道如何调用这些方法,然后通过$.fn.func()
答案 3 :(得分:0)
您还可以使用事件,以便插件使用bind监听事件,然后调用触发器。可以像窗口等目标。