1

私の問題、関数呼び出しをデバウンスしたいのですが、関数が呼び出されるスコープに関連しています。

私の例では、イベントによって委任されたクリックを探して、クリックをデバウンスします。

これは機能しますが、デバウンスは要素固有ではありません!

http://jsbin.com/itapuf/2/edit

エレガントな方法はありますか?


編集: より具体的には(私の英語は最高ではありません)

このコードを置き換えたい:

$('#blue').on('click',function(id){
    addBeep('trigger');
}.throttle(300) );

$('#green').on('click',function(id){
    addBeep('trigger');
}.throttle(300) );

これにより(イベント委任):

$('#btns').on('click','button', function(id){
    addBeep('trigger');
}.throttle(300) );

しかし、そうすると、特定の要素に対する最新のクリックが失われる可能性があります。

次のようなものが必要です:

$('#btns').on('click','button', function(id){
    addBeep('trigger');
}.throttle(300, {bindToScopt:true} ) );

しかし、スロットル機能をこのように変更するにはどうすればよいでしょうか?

または、この問題に対するより良い解決策はありますか?

4

1 に答える 1

0

おそらく、適切な場所に以下を追加することをお勧めします

 e.stopPropagation()

これにより、バブリングフェーズでのイベントのすべての伝播が停止します。完全なクロスブラウザエクスペリエンスを実現するには、

function doSomething(e) {
    if (!e) var e = window.event;
    e.cancelBubble = true;
    if (e.stopPropagation) e.stopPropagation();
}

quirksmode.orgでイベント処理に関する完全な投稿を読んでください

于 2012-12-11T09:32:46.003 に答える