2011-07-29 75 views
0

我試圖使點擊文本輸入默認的最近按鈕。爲此,我寫了下面的代碼。通過使用事件監聽器的默認按鈕切換器

首先,爲什麼我的buttonSwitcher函數跟在MouseEvent.CLICK後面?其次,有沒有更好的方法來做到這一點?

在此先感謝

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="addListeners()"> 
    <mx:Script> 
     <![CDATA[ 

      public function addListeners():void { 
       a.addEventListener(MouseEvent.CLICK, buttonSwitcher); 
       b.addEventListener(MouseEvent.CLICK, buttonSwitcher); 
      } 

      public function buttonSwitcher(event:MouseEvent):void { 

       form.defaultButton = (((event.currentTarget as TextInput).id == "a") ? aButton : bButton); 

      } 
     ]]> 
    </mx:Script> 

    <mx:Panel> 
     <mx:Form id="form"> 
      <mx:FormItem label="a" direction="horizontal"> 
       <mx:TextInput id="a" /> 
       <mx:Button id="aButton" label="aButton" /> 
      </mx:FormItem> 
      <mx:FormItem label="b" direction="horizontal"> 
       <mx:TextInput id="b" /> 
       <mx:Button id="bButton" label="bButton" /> 
      </mx:FormItem> 
     </mx:Form> 
    </mx:Panel> 
</mx:Application> 

回答

0

使用更改按鈕,也許使用FocusEvent,而不是點擊,那麼你也切換按鈕事件的HT ecapture階段時使用「標籤」,通過inputfields:

private function addListeners():void 
{ 
    a.addEventListener(FocusEvent.FOCUS_IN, buttonSwitcher, true); 
    b.addEventListener(FocusEvent.FOCUS_IN, buttonSwitcher, true); 
} 

public function buttonSwitcher(event:FocusEvent):void 
{ 
    form.defaultButton = (((event.currentTarget as TextInput).id == "a") ? aButton : bButton); 
} 
+0

謝謝,它的工作,但仍然是我的第一個問題是沒有答案。 – bfaskiplar

+0

這是因爲defaultButton的改變來得太晚。當表單(或其任何子項)獲得焦點時,它將'更新'defaultButton(在頁面上可以有多個defaultButton)。你的eventlistener在更新已經發生之後被調用第二次。通過在捕獲階段捕獲事件(第三個參數爲true),在其餘(頁面的defaultButton更新)運行之前更改defaultButton ... – pkyeck