28

jQueryのようなもの、および/またはjQuery(または一般的にブラウザのJavaScript)でイベントの元のターゲットを取得するベストプラクティスの方法は何ですか.

私はこのようなものを使用してきました

$('body').bind('click', function(e){
        //depending on the browser, either srcElement or 
        //originalTarget will be populated with the first
        //element that intercepted the click before it bubbled up
        var originalElement = e.srcElement;
        if(!originalElement){originalElement=e.originalTarget;}                         
});

これは機能しますが、2 行の機能スニッフィングには満足できません。より良い方法はありますか?

4

5 に答える 5

36

あなたはそれを一行で行うことができますvar originalElement = e.srcElement || e.originalTarget;が、それはかなりJQueryのようではありません;-)

[編集: しかしhttp://docs.jquery.com/Events/jQuery.Event#event.target event.targetによると...]

于 2009-01-27T21:56:19.060 に答える
24

e.target が必要だと思います

$('body').bind('click', function(e){
                e.target // the original target
                e.target.id // the id of the original target                                               
});

jQuery in Action の Web サイトにアクセスしてソース コードをダウンロードする場合は、

  • 第4章 - dom.2.propagation.html

バブルとキャプチャ ハンドラを使用してイベントの伝播を処理する

于 2009-01-27T22:07:52.063 に答える
22

を使用event.originalTargetすると、「クロム以外のコンテキストからプロパティ 'XYZ' にアクセスする権限が拒否されました」というエラーが発生する可能性があるため、次の使用をお勧めします。

var target = event.target || event.srcElement || event.originalTarget;

event.targetFirefox、Opera、Google Chrome、Safari で動作します。

于 2011-01-27T13:35:07.020 に答える
2

要素の外側のクリックを検出する方法と併せて? 独自のポップオーバーが一緒に非表示になるのを防ぐために、同様のクリック時に非表示の外側の機能を使用してサブウィジェットをトラップする方法を次に示します。この場合、JQuery UI Datepicker ポップオーバー ウィジェットをトラップしています。

// not using jquery .one handler for this, so we can persist outside click later
$('html').click(function(evt) {
    // just return if element has the datepicker as a parent
    if ($(evt.target).parents('#ui-datepicker-div').length>0) return;

    //toggle shut our widget pop-over
    $('#mywidget').toggle();

    // now, unbind this event since our widget is closed:
    $(this).unbind(evt);
});
于 2012-07-02T18:08:55.327 に答える
0

通常の Javascript では、 var t = (e.originalTarget)?e.originalTarget:e.srcElement; すべてのブラウザで読むには十分なはずです。

于 2011-06-27T11:20:21.063 に答える