我想知道是否有可能为jom操作追加jQuery回调:
像新事件一样有效的东西。
示例:
$('#mydiv').bind('hide', function(){
console.debug('someone call hide function')
});
//then in other js file, other function, anywhere.
$('#mydiv').hide();
//hide and output 'someone call hide function'
我查看了.queue和jQuery.Callback,但只有在我为这个函数创建自己的包装器时它才会起作用?
也许jQuery插件?
这可以在不改变所有我的js调用这个插件的情况下完成吗?不是这样的东西:
$('#mydiv').myPluginsHide();
感谢。
答案 0 :(得分:1)
我不知道内置任何内容,但你可以通过迭代jQuery.fn
来自己完成(即你会像Felix Kling建议的那样覆盖那些功能):
var callbacks = {};
var excluded = ['constructor','init','jquery'];
for ( var key in $.fn ) {
var orig = $.fn[key];
if ( !orig instanceof Function || excluded.indexOf(key) != -1 )
continue;
(function(key,orig) {
callbacks[key] = []; // This is the list of callbacks for this function
$.fn[key] = function() {
var ret = orig.apply(this,arguments); // Applies the function normally
var elements = this, args = arguments;
callbacks[key].forEach(function(f) { f(elements, args); }); // Calls each callback
return ret;
};
})(key,orig);
}
然后你只需要在callbacks
对象的相应条目中添加/删除回调。
更新:不知道我在这里缺少什么,但无法使example工作。 (编辑:啊,忘记将变量包装在一个闭包中的经典错误......现在应该可以正常工作。还添加了一个excluded
列表,用于必须 not的函数被覆盖)。
答案 1 :(得分:1)
您可以查看jQuery.Deferred ...我认为它是这样的......
$(function(){
$.when($('#one').hide('slow'))
.then(function () {
$('#two').hide('slow')
})
.then(function () {
$('#three').hide('slow')
});
});