我有一个Flex应用程序,其中使用Canvas来包含其他几个组件。在该Canvas上有一个Button,用于调用系统中的特定流。点击画布上的任何其他位置应该会导致出现详细信息窗格,显示有关此控件所代表的记录的更多信息。Flex - 避免单击封闭组件时的容器上的单击事件
我遇到的问题是,因为按钮位于画布内部,所以无论何时用户单击按钮,单击事件都会触发按钮和画布。如果用户点击另一个组件覆盖的区域,是否有办法避免在Canvas对象上触发点击事件?
我创建了一个简单的小测试应用程序来演示该问题:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
private function onCanvasClick(event:Event):void {
text.text = text.text + "\n" + "Canvas Clicked";
}
private function onButtonClick(event:Event):void {
text.text = text.text + "\n" + "Button Clicked";
}
]]>
</mx:Script>
<mx:Canvas x="97" y="91" width="200" height="200" backgroundColor="red" click="onCanvasClick(event)">
<mx:Button x="67" y="88" label="Button" click="onButtonClick(event)"/>
</mx:Canvas>
<mx:Text id="text" x="97" y="330" text="Text" width="200" height="129"/>
</mx:Application>
由于它当您单击该按钮,你会看到在文本框中做了两个条目表示,“按钮被点击”之后“画布点击”,即使只点击一次鼠标。
我想找到一种方法,我可以避免让第二个条目成为当我点击按钮时只有“Button Clicked”条目被创建,但是如果我点击Canvas中的任何其他地方“Canvas Clicked”条目仍然会出现。
需要注意的是,这也会阻止当前目标*上的其他事件侦听器*执行。如果您希望执行curent目标上的所有侦听器,并防止事件进一步冒泡,请使用`event.stopPropagation`。 – 2009-12-09 20:19:31