1

$.Callbacks() にコールバック関数を追加した後、もう一度削除したいと思います。

var callbacks = $.Callbacks(),
    foo = function() { console.log('Hello world') };

callbacks.add(foo);
callbacks.fire(); // logs 'Hello world'
callbacks.remove(foo);
callbacks.fire(); // nothing to trigger, removed perfectly

それで、それはうまくいきますが、次のように無名関数を追加したいと思います:

callbacks.add(function(){ console.log('Hello anonymous world') });
callbacks.fire(); // logs 'Hello anonymous world'

問題ないように見えますが、関数を削除することはできません:

callbacks.remove(function(){ console.log('Hello anonymous world') });
callbacks.remove();

callbacks.fire(); // still logs 'Hello anonymous world'

これを克服する方法はありますか?

4

2 に答える 2

3

OP リクエストごと:

関数はポインターによって識別されます。無名関数へのポインターがないため、削除する関数を伝えるために remove() に渡すものは何もありません。複製には異なるポインターがあるため、単に複製関数を渡すだけでは機能しません。関数を変数に割り当ててから、その変数を remove() に渡すことに固執する必要があります。

参照: http://api.jquery.com/category/callbacks-object/

于 2012-04-17T14:34:20.347 に答える