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行機能のスニッフィングには満足していません。もっと良い方法はありますか?
var originalElement = e.srcElement || e.originalTarget;
を使用して1行で実行できますが、JQueryのようなものではありません;-)
[編集:しかし http://docs.jquery.com/Events/jQuery.Event#event.targetevent.target
によると...]
私は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サイト にアクセスしてソースコードをダウンロードする場合は、以下を参照してください。
バブルハンドラーとキャプチャハンドラーを使用したイベント伝播を処理します
event.originalTarget
を使用すると、「非クロムコンテキストからプロパティ「XYZ」にアクセスするためのアクセス許可が拒否されました」エラーが発生する可能性があるため、次の使用をお勧めします。
var target = event.target || event.srcElement || event.originalTarget;
event.target
は、Firefox、Opera、Google Chrome、Safariで動作します。
要素の外側のクリックを検出する方法は? これは、同様のクリック時に外側を隠す機能を備えたサブウィジェットをトラップして、独自のポップオーバーが一緒に隠れないようにする方法です。それ;この場合、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);
});
通常のJavascriptでは、var t =(e.originalTarget)?e.originalTarget:e.srcElement;すべてのブラウザでそれを読むのに十分なはずです。