0

フォーカスアウトハンドラーをリッスンしたいコンポーネントに対してのみ処理したいが、そのコンポーネント内の子には処理したくない。例 vgroup コンテナー内に vgroup があり、TextInput、TextArea、ComboBox などの UI コントロールがあり、VGroup のフォーカスをリッスンしたいので、VGroup の focusoutHandler を保持しますが、フォーカスを textinput から textarea またはコンボボックスに変更すると、focusoutHandler が呼び出されます。 .VGroup だけに focusOut を与える方法。

<s:VGroup id="vGroup" focusOut = vGroupFocusOutHandler(event)>
   <s:TextInput />
   <s:TextArea/>
   <s:ComboBox/>  
<s:VGroup/>
4

2 に答える 2

1

ユーザーがフォーカスしているオブジェクトが (直接的または間接的に) VGroup の子でないことを確認する必要があります。子供の場合何もしません。そうでない場合は、やらなければならないことをします。

方法は次のとおりです。

<s:VGroup id="vGroup" focusOut="handleFocusOut(event)">
    <s:TextInput />
    <s:TextArea />
    <s:ComboBox />  
</s:VGroup>

.

private function handleFocusOut(event:FocusEvent):void {
    //only do something if we focus out of vGroup
    if (!isInVGroup(event.relatedObject)) {
        trace(event);
    }
}

private function isInVGroup(el:InteractiveObject):Boolean {
    if (!el || !el.parent) return false;

    var parent:DisplayObjectContainer = el.parent;
    while (parent != vGroup && parent != stage) {
        parent = parent.parent;
    }

    return parent == vGroup;
}

relatedObjectプロパティは、ユーザーが注目する要素です。

于 2012-06-27T11:15:19.393 に答える
1

イベント ハンドラ コードでこれを試すことができます。

private function handleFocusOut(event:FocusEvent):void {
    //only do something if we focus out of vGroup
    if (!this.contains(event.relatedObject)) {
        trace(event);
    }
}
于 2013-06-19T19:12:42.613 に答える