[英]Use jQuery functions as event
我想知道是否有可能将回调附加到dom的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();
谢谢。
我不知道有什么内置函数可以做到这一点,但是您可以通过迭代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
对象中的相应条目添加/删除回调。
更新:不知道我在这里缺少什么,但是无法使示例工作。 ( 编辑:啊,忘记将变量包装在闭包中的经典错误……现在应该可以使用。还添加了一个excluded
列表,用于不能被覆盖的函数)。
您也许可以研究jQuery.Deferred ...我认为是这样的...
$(function(){
$.when($('#one').hide('slow'))
.then(function () {
$('#two').hide('slow')
})
.then(function () {
$('#three').hide('slow')
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.