哪个事件触发了回调函数

Posted

技术标签:

【中文标题】哪个事件触发了回调函数【英文标题】:Which event fired off the callback function 【发布时间】:2012-10-01 13:16:33 【问题描述】:

我有一个 FlexMouseEvent.MOUSE_DOWN_OUTSIDE 事件,用于与触发弹出窗口的 LinkBut​​ton 的单击事件相冲突的弹出窗口。本质上,我希望我的标签的单击事件在每次单击时像开关一样打开/关闭弹出窗口。关闭此弹出窗口的另一种方法是通过 FlexMouseEvent.MOUSE_DOWN_OUTSIDE。

这两个冲突特别是当 FlexMouseEvent.MOUSE_DOWN_OUTSIDE 在弹出触发链接按钮上单击时。

我的想法是,如果在 LinkBut​​ton/ 上单击该事件,我将停止传播该事件,但我该怎么做。本质上,我如何在我的回调函数中检查实际触发的事件(元素有多个事件侦听器,因此它不是故障安全的)

这里有一些代码可供参考:

element.addEventListener(FlexMouseEvent.MOUSE_DOWN_OUTSIDE, callBackFunction, false, 0, true);  
element.addEventListener(AnotherEvent, callBackFunction, false, 0, true);

【问题讨论】:

作为旁注,我还需要知道 FlexMouseEvent 在哪个元素上单击自身,以便它停止传播 【参考方案1】:

这很简单。每个事件都有一个 currentTarget 属性,它是触发该事件的对象。您可以使用 e.currentTarget 来确定用户单击了哪个对象。

private function mouseDownOutside(e:FlexEvent = null):void
    if ( e.currentTarget == obj ) 
         //do something
    

如果您需要它更通用一点或对象超出范围,您也可以进行简单的“是”检查。

if ( e.currentTarget is DataType ) 
    //do something

这对于在循环中创建大量对象时也很有帮助。一旦你离开循环,它们就会超出范围,所以你不能在之后真正调用它们。因此,假设您创建了一个包含 50 个缩略图的画廊,并且您想要加载用户单击的缩略图的全屏版本。在您的实例化循环中,您将拇指的 name 属性设置为循环中的迭代(通常为 var i),然后您可以使用 (e.currentTarget as DisplayObject).name 将其与更大的图像相关联。

【讨论】:

嗯...我一直在检查 currentTarget 和 target 事件。我认为 currentTarget 是事件操作将在其上产生结果的对象。本质上,它是添加了 addEventListener 的元素。 我认为他的意思是目标;不是当前目标。请记住,许多 Flex 组件是使用其他组件的封装创建的。我不知道目标是否永远是您认为的组件。 不,我的意思是 currentTarget。回头看这个问题,我想我可能读错了。无论如何,currentTarget 是调度事件的对象。因此,如果您有两个带有 mouse_outside 事件的项目,但只想在其中一个事件触发时触发代码,则在触发任何代码之前验证 currentTarget 是对象。如果我仍然读错了,并且您需要做的不是在单击另一个对象时触发此代码,那么不幸的是,您可能不得不比较鼠标和对象的位置。抱歉没看懂。

以上是关于哪个事件触发了回调函数的主要内容,如果未能解决你的问题,请参考以下文章

uni-app防抖和节流

神马是回调函数?

一个简单的java回调函数的实现

从事件处理程序回调调用的函数中“this”的值?

jquery 中的回调函数,回调函数(callback)是什么?

回调函数(callback)是什么?