在javascript事件触发器中,这与e.target何时相同?射击顺序?

在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

样本A:

<table><tr>
  <td onclick='return tdclick()'><img ... /></td>
</tr></table>
假设用户单击上面的IMG,则以下情况属实:
  • imgclick
    触发IMG,并且
    this==e.target
  • 然后一切都发生在上面的A中
  • 最后,如果事件处理程序是通过

    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
    }