的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)))?
如果你想使用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的发展。
将event.target?
你需要检查它并将其赋值给一个变量并使用它..
var target = event.target ? event.target : event.srcElement;
可能是错过了点...
这里去为我的调查(在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内容)
最简单的方式存档,这是通过使用:
var target = event.target || event.srcElement;
这种工作方式是因为:
- 测试如果
event.target
是truthy这要是不在该浏览器中存在将评估为false。 - 如果计算结果为false,那么它会移动到下一个经营者在这种情况下是
event.srcElement
。
而与此您将结束与存在其中执行代码的当前浏览器的第一个值。
这里的问题不是说你没有使用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)
使用:
var target = (event.target !== undefined)? event.target.name : event.srcElement.tagName;
然后:
if ( target === 'A' || target === '...') {
...
}
OR:简单的使用方法:
var target = event.srcElement.tagName;
测试了铬35 :)