我的插件需要一些时间做某事。所以我想听听插件从外面完成任务的时间,以便我可以显示一些内容。
我希望有这样的东西 -
$('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");
}
我的意思是如果在插件中定义了事件,如果我不想在外部代码中处理该怎么办?
答案 0 :(得分:1)
奇怪。这个对我有用。 http://jsfiddle.net/LHzjG/
顺便说一下,您也可以使用config.onComplete()
直接调用回调,如果愿意,可以使用params。您可以使用jQuery.isFunction()
预先检查它是否是一个函数。