2

( 経由で) 特定の変数に事前にバインドされたイベント ハンドラーがあります$.proxy。その結果、ハンドラーがトリガーされるとthis、通常の値ではなく、事前にバインドされた値になります。

thisハンドラーのevent引数を使用して回復したいのですが、 、、またはその他のイベント プロパティにthis直接マップされていないようです。event.currentTargetevent.target

そこで、jQuery のソースを調べてみましたが、イベント コールバックは非常に複雑で、何thisが設定されているのか正確にはわかりません。thisイベント引数のみを使用してjQueryイベントハンドラーをシミュレートする方法を知っている人はいますか?

* * 編集 * *

明確にするために、ここに例を示します。

var boundThis = {foo: 'bar'}
var handler = $.proxy(function(event) {

    // Because of the $.proxy, this === boundThis
    // (NOT the normal "this" that jQuery would set)
    // In theory event has everything I need to re-create this,
    // but I'm having trouble figuring out exactly how

    // Here's a naive/non-functional example of what I'm trying to do
    jQueryThis = event.target; // If only this worked ...

}, boundThis);
$(someElement).click(handler);
4

1 に答える 1

4

event.currentTarget通常はthiswith jQuery イベントの値です。ドキュメントで説明されているように:

説明: イベント バブリング フェーズ内の現在の DOM 要素。

デモ: http://jsfiddle.net/rhgEB/

event.targetのままですが、現在処理されている要素#bazを参照します。なしevent.currentTargetと同じです。thisproxy

* * machineghost による編集 * *

将来の読者の時間を節約するために、イベント オブジェクト (" ")thisに基づいて同等のものを生成するための "魔法の公式" は次のとおりです。e

var fakeThis = e.delegateTarget === e.currentTarget ? e.currentTarget : e.target;
于 2012-07-03T01:25:18.070 に答える