任何何时使用一个或另一个的示例都将受到赞赏。
#1 楼
Ben的回答完全正确-请牢记他说的话。我要告诉您的不是一个完整的解释,但这是一种很容易记住e.target
,e.currentTarget
与鼠标事件和显示列表相关的工作方式: e.target
=点号之前的东西...(见下文)因此,如果您有10个按钮在实例名称为“ btns”的剪辑中,您可以执行以下操作:
btns.addEventListener(MouseEvent.MOUSE_OVER, onOver);
// btns = the thing before the dot of an addEventListener call
function onOver(e:MouseEvent):void{
trace(e.target.name, e.currentTarget.name);
}
e.currentTarget
将是10个按钮之一,而e.target
将始终是“ btns”剪辑。值得注意的是,如果将MouseEvent更改为ROLL_OVER或将属性
e.currentTarget
设置为false,则btns.mouseChildren
和e.target
都将始终为“ btns”。评论
因此,换句话说,target是孩子,而currentTarget是容器。
– Artemix
2011年5月7日14:27
不,currentTarget始终是侦听事件的对象;目标是接收事件的实际目标。每次事件冒泡时,目标都会接收到事件并在显示列表中冒泡。 (或者相反,用于事件捕获)
–戳
2011年5月7日14:34
如果是由孩子派遣的,则目标是孩子。通常,您将要使用e.currentTarget,因为这是您分配给侦听器的对象。但是在某些情况下(例如上面列出的一个Zevan),您希望一个容器上有多个子级的侦听器,然后使用e.target来查看哪个子级调度了该事件。
–本·盖尔
2011年5月7日14:35
来自@poke的评论是最佳答案“ currentTarget始终是侦听对象,target是接收事件的实际目标”
– PandaWood
16年4月1日在6:21
#2 楼
e.target
是触发事件调度程序触发的原因,而e.currentTarget
是您分配了侦听器的原因。 评论
这是一个很好的例子:joequery.me/code/event-target-vs-event-currenttarget-30-seconds
– Glenn Wark
17 Mar 1 '17 at 15:51
#3 楼
e.currentTarget
始终是事件实际绑定的元素。 e.target
是事件起源的元素,因此e.target
可以是e.currentTarget
的子元素,或者e.target
可以是=== e.currentTarget
,具体取决于标记的结构。#4 楼
我喜欢视觉答案。单击
#btn
时,将调用两个事件处理程序,它们将输出您在图片中看到的内容。此处的演示:https: //jsfiddle.net/ujhe1key/
评论
问题是关于AS3而不是JS。
– Artemix
16-10-23在14:35
好的,对标记感到抱歉。答案仍然适用于两者。
–Maria Ines Parnisari
16-10-23在21:23
#5 楼
值得注意的是event.target可能有用,例如,使用单个侦听器触发不同的动作。假设您有一个带有10个按钮的典型“菜单”子画面,因此无需执行以下操作:menu.button1.addEventListener(MouseEvent.CLICK, doAction1);
menu.button2.addEventListener(MouseEvent.CLICK, doAction2);
etc...
您可以简单地执行以下操作:
menu.addEventListener(MouseEvent.CLICK, doAction);
并根据事件event.target(使用其name属性等)在doAction(event)中触发不同的动作
#6 楼
举个例子:var body = document.body,
btn = document.getElementById( 'id' );
body.addEventListener( 'click', function( event ) {
console.log( event.currentTarget === body );
console.log( event.target === btn );
}, false );
当您单击“ btn”时,将出现“ true”和“ true”!
#7 楼
target is the element that triggered the event (e.g., the user clicked on)
currenttarget is the element that the event listener is attached to.
#8 楼
e.currentTarget将始终返回添加了事件侦听器的组件。另一方面,e.target可以是组件本身,也可以是任何直接子代,孙子代或孙子代。以此类推。换句话说,e.target返回在“显示列表”层次结构中位于顶部的组件,并且必须在子层次结构或组件本身中。
当您在Canvas中有多个Image时,一种用途是并且您想要将图像拖到组件内但可以拖到画布中。您可以在Canvas上添加一个侦听器,并可以在该侦听器中编写以下代码,以确保不会拖动Canvas。
function dragImageOnly(e:MouseEvent):void
{
if(e.target==e.currentTarget)
{
return;
}
else
{
Image(e.target).startDrag();
}
}
#9 楼
e.target是元素,您可以click
e.currentTarget是具有添加的事件侦听器的元素。
如果单击button的子元素,则最好使用currentTarget来检测按钮属性,在CH中使用e有时会出现问题.target。
评论
这个小提琴非常清楚地显示了差异有没有人足够了解ActionScript3,以确认其事件的行为与DOM事件相同?
等效的JavaScript:stackoverflow.com/questions/10086427/…
Murhaf Sousli提供的参考是一个清晰的解释,回答了有什么区别的问题。对此提琴进行一些简化后的版本将是最佳答案。