拖延不应该发生

时间:2011-07-25 21:53:44

标签: flex actionscript-3 actionscript

我有一个画布,然后在此我放了一个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中选择文本时,整个画布被拖动,我无法选择文本。

克里斯

1 个答案:

答案 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中,这只是要记住的事情。