1

[FocusEvent type="focusIn" bubbles=true cancelable=false eventPhase=3 relatedObject=null shiftKey=false keyCode=0]

TextField をマウスでクリックすると、別の (編集可能な) フィールドにフォーカスを移したいのですが、現在、どこかでフォーカスが失われています。フォーカスがどこにあるのかわかりません。

stage.focus = editfield でフォーカスを別のフィールドに戻そうとする textfield のリスナーを作成しましたが、機能しません。

ステージにも同じフォーカスリスナーがありますが、違いはありません。

4

1 に答える 1

1

あなたの例には「FocusEvent」がリストされているので、Flex ソリューションに焦点を当てます。これは Flash AS3 クラスではありません。

Flex がそれ自体でフォーカスを管理しようとしており、それがフォーカスを設定しようとする試みを台無しにしていることに賭けます。ただし、これを回避する方法はいくつかあります。

Flex はあなたに逆らおうとしていますか?
まず、FocusManager クラスまたは UIComponent setFocus メソッドのいずれかを使用することをお勧めします (これは、具体的に何をする必要があるかによって異なります。FocusManager を使用すると、複数のオブジェクトをターゲットにできますが、setFocus メソッドの方がはるかに簡単です)。ステージ。フォーカス。これには、Flex コンポーネント システム内でネイティブに機能するという利点があります。

正しいイベントを聞いていますか?
それができない場合は、探している FocusEvent のターゲットがテキストフィールドでもテキストフィールドの子でもないことを確認してください。(正気のために)。それでもうまくいかない場合は、イベントが 1 回だけディスパッチされていることを確認してください。次に、FocusEvent の代わりに MouseEvent.CLICK を使用してみます。

他のすべてが失敗しましたか?
残念ながら、Flex は多くの場合、完璧にはほど遠いものです。「正しい順序」でイベントを発生させないという事実を回避するために setTimeout を使用しなければならないことがあります。また、TextArea の TextWidth プロパティが正しい数値を返しません。回避策

private function myListener( event:FocusEvent ):null
{
    setTimeout( function(){ editfield.setFocus(); }, 35 );
}
于 2009-02-12T16:24:27.443 に答える