如何在jQuery插件内外使用公共函数?

时间:2010-08-27 15:41:20

标签: jquery jquery-plugins

我正在编写一个jQuery插件,需要可以从插件内部和插件外部调用的函数。到目前为止,这是我的代码:

(function($){
 $.fn.bxSlider = function(options){

  var defaults = {
   mode : 'horizontal',
   speed : 500
  }

  var options = $.extend(defaults, options);

  var base = this;

  this.each(function(){   
   var someText = base.getText;
   console.log(someText);
  });

  this.getText = function(){
   return base.children().text();
  }

  return this;

 } 

})(jQuery);

当我从插件外部调用getText()时,它可以正常工作:

$(function(){
 var slider = $('ul').bxSlider();
 var text = slider.getText();
 $('body').append(text);
});

但是当我尝试在插件中调用函数时,我得到一个“函数未定义”错误。我使用了错误的语法吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

您在之前将其称为,并将其添加到该jQuery对象中。

试试这个:

  var base = this;

  this.getText = function(){
   return base.children().text();
  }

  this.each(function(){   
   var someText = base.getText;
   console.log(someText);
  });

答案 1 :(得分:0)

您似乎正在将方法getText添加到每个实例上,并尝试在定义之前调用它。你可以:

  1. 切换this.eachthis.getText =的顺序,以便先指定getText
  2. 通过扩展getText,以与分配bxSlider相同的方式分配$.fn。这样它就会出现在所有jQuery对象的原型上。如果在调用对象上的getText之前调用bxSlider,则可能需要构建一些逻辑来验证错误。