2010-10-19 78 views
2

有没有办法在我的脚本中直接调用jQuery插件中定义的方法?如何从外部调用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

希望此链接帮助http://forum.jquery.com/topic/how-do -i-call -a-call-a-plugin-once-it-s-attached – 2010-10-19 14:03:08

+1

插件通常使用闭包,并只允许公众访问一些需要根据需要进行更改的变量(选项),这意味着方法通常是私有的,不能从外部调用。但通过引入新的选项,您可以按照您的要求扩展或修改插件。 – naiquevin 2010-10-19 14:07:33

回答

4

直接回答你的问题是“否”。如发布的那样,该代码显式地隐藏了来自外部世界的这些功能。

一种jQuery-ish方式使这些功能可用是为了区别它们。就个人而言,我喜欢创建具有相应的“全局”对象的插件,所以如果我有

$.fn.pointy = function() { 
    // plugin 
} 

我还必须:

$.pointy = { 
    something: function() { ... }, 
    somethingElse: function() { ... } 
} 

这是很好的同时提供相关的公用事业,也配置蜜蜂。因此,您可以将“doSomething”功能放在那里,然后通过将名称限定为$.myPlugin.doSomething()来在插件中使用它们。当然你也可以通过创建这个函数在你的插件初始化中,这样他们可能会关闭并访问其他的私有函数。

0

我不是100%肯定,我得到你,但定义你仍然可以CAL它jQuery的选择之外的新功能之后,请参阅:

$.fn.myfunc = function(){ 
    alert('foo'); 
} 
$.fn.myfunc(); // works 
$('#something').myfunc(); // works too 

所以你必须找出到底如何调用方法,然后通过$.fn.func()

0

您还可以使用事件,使插件正在侦听带绑定的事件,然后调用触发器。可能是一个像窗口等目标

1

在我看来最好的是使用事件系统,当你nedd从外面打电话。 这里是你的代码的结果:

(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); 

或outisde用同样的方法把它叫做:

$('.myPluginDiv').trigger('doSomethingElse'); 
$('.myPluginDiv').trigger('doSomething');