如何从我的jquery插件外部监听事​​件?

时间:2011-08-05 07:22:08

标签: jquery events plugins

我的插件需要一些时间做某事。所以我想听听插件从外面完成任务的时间,以便我可以显示一些内容。

我希望有这样的东西 -

 $('li').filterGroup ({

        onInit: function(){
          alert("plugin has started working");
        },

        onComplete: function(){

          alert("plugin has finished");
        }
    })

我尝试在我的插件代码中写这个 -

(function($) {
    // jQuery plugin definition

    $.fn.filterGroup = function(config) 
    {

        var settings = {
                    //some settings defined here
                        };




            var thisDropdown = this; //master  copy

        if(config)
        {
            $.extend(settings, config);
        }

            /*Tried following changes to make events work*/
            /*Tried following changes to make events work*/
            /*Tried following changes to make events work*/
            //I tried the following – assuming I will be able to listen to an onComplete event from outside

        // reference the function from the options passed
            var theFunc = config.onInit;
            var anotherFunc = config.onComplete;
            theFunc.call(); //does not work - gives error "theFunc is not a function"

        this.each(function() 
        {      
                    //here my plugin logic is done
            anotherFunc.call(); //this is also not working - "anotherFunc is not a function"
        });

        // allow jQuery chaining
        return thisDropdown;
    };

但这不起作用,我收到错误 -

theFunc is not a function

注意 - 我检查了PLugins创作文档,特别是事件部分http://docs.jquery.com/Plugins/Authoring#Events,但看起来这是用于定义可以从外部调用的公共函数,所以不是我的意思寻找。原始jquery文档在哪里?我想我只需要正确地遵循文档。

还检查了以下问题但没有得到 -
Bind Event to Custom Plugin Function in jQuery
Custom Event For Custom JQuery Plugin
Handle events in a jQuery plugin

更新

好吧,弄错了,在我的实际代码中我有theFunc.call()anotherFunc.call(),但在调用部分我只处理了onComplete。那么,我是否需要在我的插件调用中明确编写onInit()部分 -

这部分 -

onInit: function(){
              alert("plugin has started working");
            }

我的意思是如果在插件中定义了事件,如果我不想在外部代码中处理该怎么办?

1 个答案:

答案 0 :(得分:1)

奇怪。这个对我有用。 http://jsfiddle.net/LHzjG/

顺便说一下,您也可以使用config.onComplete()直接调用回调,如果愿意,可以使用params。您可以使用jQuery.isFunction()预先检查它是否是一个函数。