Javascript 使用jQuery函数作为事件

Javascript 使用jQuery函数作为事件,javascript,jquery,jquery-callback,Javascript,Jquery,Jquery Callback,我想知道是否有可能为dom操作向jQuery追加回调: 附加 预编 addClass 切换类 移除类 瓦尔 正文 css 属性 html 隐藏 等 像新事件一样工作的东西 例如: $('#mydiv').bind('hide', function(){ console.debug('someone call hide function') }); //then in other js file, other function, anywhere. $('#mydiv').hide(

我想知道是否有可能为dom操作向jQuery追加回调:

  • 附加
  • 预编
  • addClass
  • 切换类
  • 移除类
  • 瓦尔
  • 正文
  • 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'
我看了和,但它只有在我为这个函数制作自己的包装器时才会起作用

也许是jQuery插件

这可以做到而不改变我所有的js调用这个插件?不是这样的:

$('#mydiv').myPluginsHide();

谢谢。

我不知道任何内置的函数可以做到这一点,但您可以通过迭代
jQuery.fn
(即,您将按照Felix Kling的建议覆盖这些函数):

然后,您只需在
回调
对象的相应条目中添加/删除回调


更新:不知道我在这里遗漏了什么,但无法完成工作。(编辑:啊,忘记将变量包装在闭包中的经典错误…现在应该可以了。还添加了一个
排除的
列表,用于必须而不是被覆盖的函数)。

您可以查看jQuery。延迟。。。我想是这样的

$(function(){
    $.when($('#one').hide('slow'))
        .then(function () { 
            $('#two').hide('slow') 
        })
        .then(function () { 
            $('#three').hide('slow')
        });
});

您可以使用自己的实现覆盖这些函数,即触发事件并调用原始函数。您犯的常见错误是在循环中创建闭包。对于您创建的每个函数,
orig
将引用在循环中分配的最后一个值。@FelixKling lol刚刚意识到错误,并正在更新代码(原始代码使用
$。每个
而不是循环)。现在应该可以了!:)谢谢,这解决了我的问题。我更喜欢@jStreamer898建议的“jquery解决方案”,比如Deferred,但除了调用method时,我不知道如何使用Deferred。
$。当
使用时,比如说,
$。ajax
,因为该函数返回一个
Deferred
(然后
代码将在ajax请求完成时运行,而不是在启动时)。但是大多数jQuery函数都会立即执行,并且不会返回延迟,因此这种解决方案在这种情况下不起作用。啊,我现在明白了,
hide
的返回值既是一个jQuery对象(因此可以对其进行链式调用)又是一个延迟对象(因此,如果像这样使用它,在转换效果完成时,承诺将运行). 我不知道,谢谢你指出!对我工作。但是,当其他脚本调用.hide()时,我怎么能延迟观看呢
$(function(){
    $.when($('#one').hide('slow'))
        .then(function () { 
            $('#two').hide('slow') 
        })
        .then(function () { 
            $('#three').hide('slow')
        });
});