2011-07-25 46 views
0

我有一個畫布,然後在此之上我已經把一個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中選擇文本時,整個畫布被拖動,而我無法選擇文本。

Chris

回答

1

這是我認爲正在發生的事情。 Flex事件MouseEvent類氣泡。這意味着,當你在畫布或其子項中的任何地方滑鼠時,Canvas將聽到並處理MouseDown事件(假設所有孩子都允許該事件繼續冒泡)。這就是Canvas顯示拖動行爲的原因。

爲了防止出現這種情況,您必須將MouseEvent.MOUSE_DOWN處理程序添加到TextArea中。在這個處理程序中,您將調用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中,只是要記住。

+0

是的,它的工作原理。謝謝。 – chrisiek

相關問題