谁能告诉我在JavaScript事件中的currentTarget和target属性的确切区别,以及哪个属性在哪个场景中使用?


当前回答

最小可运行示例

window.onload = function() { var resultElem = document.getElementById('result') document.getElementById('1').addEventListener( 'click', function(event) { resultElem.innerHTML += ('<div>target: ' + event.target.id + '</div>') resultElem.innerHTML += ('<div>currentTarget: ' + event.currentTarget.id + '</div>') }, false ) document.getElementById('2').dispatchEvent( new Event('click', { bubbles:true })) } <div id="1">1 click me <div id="2">2 click me as well</div> </div> <div id="result"> <div>result:</div> </div>

如果你点击:

2 click me as well

然后1监听它,并在结果后面追加:

target: 2
currentTarget: 1

因为在这种情况下:

2是引发事件的元素 1是监听事件的元素

如果你点击:

1 click me

相反,结果是:

target: 1
currentTarget: 1

铬71测试。

其他回答

事件。currentTarget是事件处理程序已经归属的元素 附加的,而不是事件。目标,它标识上的元素 哪个事件发生了,哪个可能是它的后代。

来源:中数

target总是引用addEventListener前面的元素——它是事件产生的元素。 currentTarget告诉你——如果这是一个冒泡的事件——当前附加了事件监听器的元素(如果事件发生,它将触发事件处理程序)。

有关示例,请参阅这个CodePen。如果你打开开发工具并单击方块,你会看到首先div是目标和currentTarget,但是事件气泡上升到主元素-然后主元素变成了currentTarget,而div仍然是目标。注意,要发生冒泡,需要将事件侦听器附加到这两个元素。

最小可运行示例

window.onload = function() { var resultElem = document.getElementById('result') document.getElementById('1').addEventListener( 'click', function(event) { resultElem.innerHTML += ('<div>target: ' + event.target.id + '</div>') resultElem.innerHTML += ('<div>currentTarget: ' + event.currentTarget.id + '</div>') }, false ) document.getElementById('2').dispatchEvent( new Event('click', { bubbles:true })) } <div id="1">1 click me <div id="2">2 click me as well</div> </div> <div id="result"> <div>result:</div> </div>

如果你点击:

2 click me as well

然后1监听它,并在结果后面追加:

target: 2
currentTarget: 1

因为在这种情况下:

2是引发事件的元素 1是监听事件的元素

如果你点击:

1 click me

相反,结果是:

target: 1
currentTarget: 1

铬71测试。

目标=触发事件的元素。

具有事件监听器的元素。

事件。目标是事件产生的节点,即。无论您将事件侦听器放置在何处(在段落或span上),事件。目标指的是节点(用户单击的地方)。

事件。相反,currentarget指向附加了当前事件监听器的节点。Ie。如果将事件监听器附加在段落节点上,则event。currentarget指向段落while事件。目标仍然指向span。 注意:如果我们在body上也有一个事件监听器,那么对于这个事件监听器,事件。currentTarget指的是body(即。作为事件监听器的输入提供的事件在每次事件冒泡一个节点时更新)。

如果这还不行,试试这个:

currentTarget中的current指的是当前。这是最新的目标,捕捉到从其他地方冒出来的事件。