11

HTML DOMオブジェクトモデルは、プロパティEventを持つオブジェクトtarget定義します。

MSDNを見ると、Microsoftはtargetプロパティを文書化しています。また、以前のバージョンのInternetExplorersrcElementのエイリアスとして文書化されています。target

ターゲットプロパティは、Windows InternetExplorer8以前のバージョンのsrcElementに似ています。


だからここで私はInternetExplorerにいて、clickブレークポイントに座っています:

<div class="day" onclick="divClick(this)">

function divClick(sender)
{
   var divCell = sender;

そして、F12ツールコンソールで、グローバルeventオブジェクトを要求できます。

>> event 
{
    actionURL : "",
    altKey : false,
    altLeft : false,
    behaviorCookie : 0,
    behaviorPart : 0,
    bookmarks : null,
    boundElements : {...},
    button : 0,
    buttonID : 0,
    cancelBubble : false
    ...
} 

そして、私はオブジェクトを求めることができevent.srcElementます:

>> event.srcElement 
{
    align : "",
    noWrap : false,
    dataFld : "",
    dataFormatAs : "",
    dataSrc : "",
    currentStyle : {...},
    runtimeStyle : {...},
    accessKey : "",
    className : "header",
    contentEditable : "inherit"
    ...
} 

しかしevent.target、空です:

>> event.target 

そして、私が見ている 場合、プロパティeventはありません:target

ここに画像の説明を入力してください

では、Internet Explorer(9(ドキュメントモード:IE9標準(ブラウザーモード:IE9)))でオブジェクトのtargetプロパティにアクセスするにはどうすればよいですか?event

4

6 に答える 6

13

event.target?

それをチェックして変数に割り当て、代わりにそれを使用する必要がありますか..

  var target = event.target ? event.target : event.srcElement;

ポイントを逃しているかもしれません...

于 2012-05-18T18:26:42.047 に答える
4

event.targetIE9で使用する場合は、 addEventListener()-methodを使用してeventhandlerを要素に割り当てる必要があります。

<div id="day" class="day"></div>

document.getElementById('day').addEventListener('click',divClick,false);

function divClick(e){
   alert(e.target);
   divCell=this;
   :
}

でキーワードを使用して簡単divClick()に参照できます。引数には、イベントオブジェクト自体への参照が含まれています。daythise

ところで、MSDNでは、Windows開発ではなくWeb開発に適したIEドキュメントを見つけることができます。

于 2012-05-19T06:31:33.310 に答える
2

これが私の調査です(IE9、IE10、およびIE11のEdgeブラウザーモードでテストされていますが、IE8は残念ながらjsFiddleを壊します)。IE9モード(IE11)では、event.targetが関数のローカル変数として使用可能でしたが、実際のIE9と異なるかどうかはわかりません。

eventインライン機能のあるブラウザではアクセスできません。問題はあなたがするとき

<element onclick="someFunc(this)">

そしてthis、パラメータthis === event.target(またはsrcElement)、つまり、[HTML Object]ではなく、として渡します[Event Object]

つまり、実際には、これは次のことを意味します。

<div id="foo" onclick="alert(this)"></div>

と同じです:

// note that onclick perfectly works, you don't necessarily need addEventListener
document.getElementById('foo').onclick = function(e) { alert(e.target) } //or
document.getElementById('foo').addEventListener('click', function(e) { alert(e.target) }, false);

したがって、イベントターゲットには、パラメータとして直接インラインでアクセスするか、オブジェクトパラメータのtarget || srcElementプロパティとしてjavascriptを介してアクセスします。ここで結果を自分でテストできます:http://jsfiddle.net/kevinvanlierde/tg6FP/2/

注:インラインでアタッチする場合、スクリプトの位置は重要です(bodyタグを閉じる直前)
注:インラインでアタッチする場合、event.target渡されたオブジェクトの「ルート」であるため、次のような他のイベントプロパティにアクセスできません。event.type
注: IE開発者モードには注意してください。私はそれがだまされていることを知っています(たとえば、[HTMLとして編集]をクリックするまで要素ツリーにDOMコンテンツが正しく表示されない)

于 2014-06-23T13:11:35.437 に答える
1

これをアーカイブする簡単な方法は、次を使用することです。

var target = event.target || event.srcElement;
  • 三項演算子の使用は避けてください。

これが機能する方法は次のとおりです。

  1. が真実であるかどうかをテストします。そのブラウザに存在しない場合は、falseと評価されevent.targetます
  2. falseと評価された場合、次の演算子(この場合は。)に移動しevent.srcElementます。

これにより、コードが実行される現在のブラウザーに存在する最初の値になります。

于 2016-06-20T22:13:29.587 に答える
0

ここでの問題は、使用しなかったことではありませんでしたaddEventListener()(古い学校の.onclick割り当ても機能するため)。問題は、(に等しい)をdivClick取得したことでしたが、全体が必要です。thiseventobj.targeteventobj

次の2つのケースeventobj.targetでは、の名前で取得するだけでthis、onclick-handlerに渡された引数にアクセスできません。

<div id=xyz onclick="divClick(this);">
document.getElementById("xyz").onclick = function () { divClick(this); };

eventobj次の行を使用して、全体を通常のパラメーターとして取得します。

document.getElementById("xyz").onclick = divClick;

これは、IE9+およびその他のブラウザのxyz要素でイベントが起動される方法です。

document.getElementById("xyz").onclick(eventobj)
于 2016-02-26T15:37:36.520 に答える
-2

使用する:

var target = (event.target !== undefined)? event.target.name : event.srcElement.tagName;

それから:

if ( target === 'A' || target === '...') {
    ...
}

または:簡単な使用:

var target = event.srcElement.tagName;

Chrome35でテスト済み:)

于 2014-06-23T09:06:46.563 に答える