如何从外部调用jQuery插件中的方法?

时间:2010-10-19 13:56:04

标签: javascript jquery jquery-plugins

有没有办法在我的脚本中直接调用jQuery插件中定义的方法?

更新

(function($){
  $.fn.myPlugin = function (options) {   
    return this.each(function() {

      function doSomething() {
        // do something
      }

      function doSomethingElse() {
        // do something else
      }

      doSomething();
      doSomethingElse();
    });
  }
})(window.jQuery);

现在我想从我的脚本中调用doSomethingElse()。有没有办法做到这一点?

4 个答案:

答案 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监听事件,然后调用触发器。可以像窗口等目标。