如何访问Event.target在IE9?(How to access Event.target i

2019-07-29 10:52发布

的HTML DOM对象模型限定了Event对象与target属性 。

看着MSDN,微软记录了target特性 。 他们还记录srcElement作为一个别名target从早期版本的Internet Explorer:

目标性质类似于srcElement在Windows Internet Explorer 8和更早版本。


所以我在这里在Internet Explorer中,坐在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属性:

那么,如何访问target的财产event对象在Internet Explorer(9(文档模式:IE9标准(浏览器模式:IE9)))?

Answer 1:

如果你想使用event.target在IE9中,你需要使用addEventListener() -方法分配事件处理程序的元素。

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

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

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

divClick()你可以参考day只需使用关键字this 。 参数e包含对事件对象本身的引用。

顺便说一句,在MSDN你可以找到,也许更适合IE的文档, Web开发而不是Windows的发展。



Answer 2:

将event.target?

你需要检查它并将其赋值给一个变量并使用它..

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

可能是错过了点...



Answer 3:

这里去为我的调查(在IE9,IE10和Edge的浏览器模式测试的IE11,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);

所以,你的访问活动对象直接内嵌作为参数,无论是通过JavaScript作为对象参数的target || srcElement target || srcElement属性。 你可以在这里测试自己的结果: http://jsfiddle.net/kevinvanlierde/tg6FP/2/

注:如果您连接在线,你的脚本的位置是至关重要的(结束标记之前右)
注:如果您连接在线,因为event.target是传递的对象的“根”,就不能访问其他的事件属性,如event.type
注意:小心IE开发模式。 我知道它被欺骗(例如,直到您单击“编辑为HTML”正确显示在元素树DOM内容)



Answer 4:

最简单的方式存档,这是通过使用:

var target = event.target || event.srcElement;
  • 避免使用三元运算符。

这种工作方式是因为:

  1. 测试如果event.target是truthy这要是不在该浏览器中存在将评估为false。
  2. 如果计算结果为false,那么它会移动到下一个经营者在这种情况下是event.srcElement

而与此您将结束与存在其中执行代码的当前浏览器的第一个值。



Answer 5:

这里的问题不是说你没有使用addEventListener()因为老派.onclick -assignment工程,以及)。 问题是, divClick拿到this (相当于eventobj.target ),但希望整个eventobj

在以下两种情况下,你只能得到eventobj.target的名义下this ,你必须传递到的onclick处理程序的参数的访问权限。

<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)


Answer 6:

使用:

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

然后:

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

OR:简单的使用方法:

var target = event.srcElement.tagName;

测试了铬35 :)



文章来源: How to access Event.target in IE9?