我有一个画布,然后在此我放了一个textarea。然后我添加了听众:
returnInfoCanvas.addEventListener(MouseEvent.MOUSE_DOWN,startdrag); returnInfoCanvas.addEventListener(MouseEvent.MOUSE_UP,stopdrag); returnInfoCanvas.getChildByName('textareaName')。addEventListener(MouseEvent.MOUSE_DOWN,stopdrag);
然后我用startdrag()和stopdrag()函数插入了一个startdrag和stopdrag处理程序。
这段代码有什么问题?当我单击并尝试在textarea中选择文本时,整个画布被拖动,我无法选择文本。
克里斯
答案 0 :(得分:1)
这是我认为正在发生的事情。 Flex事件MouseEvent类气泡。这意味着当你在Canvas或其子节点中的任何地方向下鼠标时,Canvas将听到并处理MouseDown事件(假设所有子节点都允许事件继续冒泡)。这就是Canvas显示拖动行为的原因。
要防止这种情况,您必须向TextArea添加MouseEvent.MOUSE_DOWN处理程序。在此处理程序中,您将调用event.stopPropagation()。这样做,是它使MouseEvent不会冒泡到其父容器并在那里进行处理。您的修复可能看起来像这样......
<TextArea>
...
protected function initializeHandler( event:FlexEvent ):void
{
this.addEventListener( MouseEvent.MOUSE_DOWN , mouseDownHandler );
}
protected function mouseDownHandler( event:MouseEvent ):void
{
event.stopPropagation();
}
...
</TextArea>
确保使用stopPropagation而不是stopImmediatePropagation,因为这将阻止textarea上的任何其他处理程序工作。需要注意的是,我自己没有这样做,所以你最终可能需要将它添加到TextArea组件的RichTextEditor中,这只是要记住的事情。