web-dev-qa-db-ja.com

元のターゲットを取得するための最良の方法

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

私はこのようなものを使用しています

$('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行機能のスニッフィングには満足していません。もっと良い方法はありますか?

27
Alan Storm

var originalElement = e.srcElement || e.originalTarget;を使用して1行で実行できますが、JQueryのようなものではありません;-)

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

36
eimaj

私は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

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

23
Russ Cam

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

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

event.targetは、Firefox、Opera、Google Chrome、Safariで動作します。

20
JussiR

要素の外側のクリックを検出する方法は? これは、同様のクリック時に外側を隠す機能を備えたサブウィジェットをトラップして、独自のポップオーバーが一緒に隠れないようにする方法です。それ;この場合、JQuery UIDatepickerポップオーバーウィジェットをトラップしています。

// 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);
});
2
Joey T

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

0
spbala