2011-07-29 2 views
0

クリックしたテキスト入力のデフォルト値に最も近いボタンを作成しようとしました。この目的のために、私は以下のコードを書いた。イベントリスナーを使用したデフォルトのボタンスイッチャー

まず、MouseEvent.CLICKの背後にある私のbuttonSwitcher関数はなぜですか? 第二に、これを行うより良い方法はありますか?

使用「タブ」のボタンを変更し、多分代わりにクリックしたのFocusEventを使用するイベントの事前

<?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

使用さ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を持つことができます)。イベントリスナーは、更新が既に発生した後に秒と呼ばれます。取得フェーズ(3番目の引数がtrue)でイベントをキャッチすることによって、残りの部分(ページのdefaultButtonの更新)が実行される前にdefaultButtonを変更します。 – pkyeck

関連する問題