4

dom操作のためにjQueryにコールバックを追加できるかどうか知りたいです:

  • 追加
  • 付加する
  • addClass
  • トグルクラス
  • removeClass
  • val
  • 文章
  • css
  • attr
  • 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();

ありがとう。

4

2 に答える 2

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オブジェクトの対応するエントリにコールバックを追加/削除する必要があります。

更新:ここで何が欠けているのかわかりませんが、を機能させることはできません。(編集:ああ、変数をクロージャーでラップするのを忘れるという古典的な間違い...今は機能するはずです。オーバーライドしてはならないexcluded関数のリストも追加されました)。

于 2012-05-25T02:06:57.753 に答える
1

jQuery.Deferredを調べることができるかもしれません...私はそれがこのようなものだと思います...

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

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

于 2012-05-25T02:08:40.197 に答える