繁体   English   中英

使用jQuery函数作为事件

[英]Use jQuery functions as event

我想知道是否有可能将回调附加到dom的jQuery:

  • 附加
  • 前置
  • addClass
  • toggleClass
  • removeClass
  • 文本
  • 的CSS
  • 属性
  • html
  • 隐藏
  • 等等

类似于新事件的事物。

例:

$('#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'

我看了.queuejQuery.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')
        });
});

http://api.jquery.com/category/deferred-object/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM