7
(function($) { 
    $.fn.top_islides = function(){
        var ajax_init = function(){
            init_islides();
            setTimeout(function(){picmove()},300);
        };
//.....
    };  
})(jQuery);

在文件中调用它准备在另一个文件中

$('#top_slides').top_islides();
$('#top_slides').top_islides().ajax_init();

我认为它应该工作,我得到一个错误,有什么问题?

4

4 回答 4

5

像这样做:

(function($) {
    //Assuming $.fn.top_islides is defined
    $.fn.top_islides.ajax_init = function(){
        init_islides();
        setTimeout(picmove,300);
    };
 //.....
})(jQuery);

或者

(function($) { 
    $.fn.top_islides = function(){
        var ajax_init = function(){
            init_islides();
            setTimeout(picmove,300);
        };
        return {
            ajax_init: ajax_init
        };
    });
     //.....
})(jQuery);
于 2012-11-25T08:02:36.643 回答
3

尝试以下示例:-

<script type="text/javascript">


    $.someplugin = {
      CallMe : function() {
            alert("You called?");
        },
      otherstuff : function() { alert("other stuff!"); }
    };


    $.someplugin.CallMe();
    $.someplugin.otherstuff();
</script>
于 2012-11-25T07:51:40.583 回答
0

在函数内部使用时var,它将使元素“私有”。这是一种让 Javascript 工作可见性的 hacky 方式,而真正的类结构不会出现在 Javascript 中。您需要将其设置为函数的原型或返回一个对象

(function($) { 
  $.fn.top_islides = function(){
    var ajax_init = function(){
        init_islides();
        setTimeout(function(){picmove()},300);
    };
    return {
      'ajax_init': ajax_init
    };
  //.....
  };  
 })(jQuery);

或者

(function($) { 
  $.fn.top_islides = function(){
  //.....
  };
  $.fn.top_islides.prototype.ajax_init = function(){
    init_islides();
    setTimeout(function(){picmove()},300);
  }
 })(jQuery);

但在你的情况下,你不会使用原型,因为你不是实例化一个新top_islides对象,而是通过 jQuery 访问,所以第一个选项是你最好的选择。

于 2012-11-25T08:04:47.040 回答
0

Imo,最好的解决方案是使用更清洁的触发器,因为您可以保留可链接的插件系统。

您可以在插件声明中声明事件处理程序并从外部触发:

(function($) { 
  $.fn.top_islides = function(){
    this.on ('init_islides', function(){
        setTimeout(function(){picmove()},300);
    };
  //.....
  };  
 })(jQuery);
$( "button" ).click(function () {
  $( "p" ).trigger( "init_islides");
});

文档可以在这里找到:http: //api.jquery.com/on/

于 2013-09-19T07:03:09.430 回答