在javascript事件触发器中,这与e.target何时相同?射击顺序?
样本A:在javascript事件触发器中,这与e.target何时相同?射击顺序?,javascript,dom,javascript-events,Javascript,Dom,Javascript Events,样本A: <table><tr> <td onclick='return tdclick()'><img ... /></td> </tr></table> 假设用户单击上面的IMG,则以下情况属实: imgclick触发IMG,并且this==e.target 然后一切都发生在上面的A中 最后,如果事件处理程序是通过 td.addEventListener( 'click', tdclick, fals
<table><tr>
<td onclick='return tdclick()'><img ... /></td>
</tr></table>
假设用户单击上面的IMG,则以下情况属实:
imgclick
触发IMG,并且this==e.target
td.addEventListener( 'click', tdclick, false );
img.addEventListener( 'click', imgclick, false );
相同的陈述是正确的还是相反的
1) 假的
2) 假的
3) 假的
该事件将只触发一次,因为只有一个“单击”事件附加到一个DOM元素。即使事件源于子元素(如img),它实际上也不会激发,直到事件冒泡到达父元素。在这种情况下,“this”将是TD元素(因为它是事件触发的源,并且调用了函数)。但是,如果查看事件传递的第一个参数,并检查它的数据,就会发现e.target通常是IMG元素
var tdClick = function(e){
console.log(e.target); // typically the IMG element
}
我之所以说“通常”,是因为有些浏览器在EventDetails对象中调用不同的原始元素。有些浏览器是“目标”,有些是“原始目标”,可能还有更多
样本B:
1) 是,imgClick为图像激发。不知道你的陈述的第二部分是什么意思。”在处理DOM事件时,它将是触发事件的DOM元素。因此,在本例中,“this”是IMG元素(也恰好是e.target)
2) 错误,如前所述:)
样本C:
addEventListener执行的操作与在元素的“onclick”属性中手动添加函数调用相同。所以,行为是一样的。。。需要注意的是,我实际上不熟悉addEventListener的第三个参数(per,它名为useCapture,与冒泡有关,我只是不熟悉)
我建议使用FireFox和Firebug扩展,或者使用Chrome并测试其中一些。在事件函数内部,只需执行console.log(this)或console.log(e)等操作,它们的开发控制台将允许您检查对象的所有细节。它非常有用。完成后,请记住取出console.log()语句,因为它们会在IE中发出嘎嘎声。再次感谢!我想我被弄糊涂了,因为dragEnter是如何工作的——它同时在IMG和TD上开火,所以我们错误地假设这是标准行为。你说的很有道理
var tdClick = function(e){
console.log(e.target); // typically the IMG element
}