AS3:TextField Focus

问题描述:

我正在尝试处理TextField上的焦点事件,因此我可以在对焦(选项卡或单击)时选择所有文本。好像我在这里做错了什么?AS3:TextField Focus

txtTextField.addEventListener(FocusEvent.FOCUS_IN, handleFocusIn); 
function handleFocusIn() { 
//select all text here 
} 

handleFocusIn应该有签名

function handleFocusIn(event:FocusEvent) // or just Event 

我曾在一个发展(闪存)的原型相类似的问题。 一个textfield根本没有触发FocusEvent.FOCUS_OUT事件。 问题是我在舞台上有一个Button组件。 只要我用从头开始创建的自定义按钮替换了Flash Button组件实例,我就可以使用它了。 我一直无法通过互联网找到这个错误和解决方案。

使用舞台上的Button组件,我只在第一次点击它时才获得FOCUS_IN事件。 之后,我既没有收到FOCUS_OUT也没有收到FOCUS_IN事件。

我希望这可以帮助任何人。

我需要同样的东西,当它接收焦点时选择文本字段的内容。

我尝试:

A)一个FocusEvent后简单地选择。这似乎并不奏效(我的猜测是FocusEvents在正在处理鼠标单击之前触发,这反过来会撤消选择)。 B)选择每次点击鼠标。这是有效的,但这对于稍后仅想选择文本的一部分的用户来说非常烦人,因为这种尝试总是会导致所有内容被选中。

以下解决方法似乎工作,虽然:

myTextField.addEventListener(MouseEvent.CLICK, selectAllOnce); 

    function selectAllOnce(e:MouseEvent) { 
     e.target.removeEventListener(MouseEvent.CLICK, selectAllOnce); 
     e.target.addEventListener(FocusEvent.FOCUS_OUT, addSelectListener); 
     selectAll(e); 
    } 

    function addSelectListener(e:FocusEvent) { 
     e.target.addEventListener(MouseEvent.CLICK, selectAllOnce); 
     e.target.removeEventListener(FocusEvent.FOCUS_OUT, addSelectListener); 
    } 

    function selectAll(e:Event) { 
     e.target.setSelection(0, e.target.getLineLength(0)); 
    } 

希望有所帮助。我个人认为,如果Adobe为这个TextField对象添加了一个选项,这将是最合乎逻辑的。

我正在做我这样的处理程序。工程就像一个魅力:

private function onFocusIn(e:FocusEvent):void 
{ 
    setTimeout(title.setSelection, 100, 0, e.target.text.length);   
} 

你可以找到用户不会只选择这样的文本的一部分:

private function clickHandler(e:MouseEvent){ 
    if(tfield.selectionBeginIndex == tfield.selectionEndIndex){ 
     tfield.setSelection(0, tfield.length); 
    } 
} 

简单的解决办法是:

import flash.events.Event; 
import flash.events.MouseEvent; 
import flash.events.FocusEvent; 

tf.addEventListener(FocusEvent.FOCUS_IN, handleFocusIn); 

function handleFocusIn(e:FocusEvent):void 
{ 
    tf.addEventListener(MouseEvent.MOUSE_UP, preventLosingSelection); 
    tf.setSelection(0, tf.length); 
    stage.focus = tf; 
} 

function preventLosingSelection(e:MouseEvent):void 
{ 
    tf.removeEventListener(MouseEvent.MOUSE_UP, preventLosingSelection); 
    tf.setSelection(0, tf.length); 
    stage.focus = tf; 
} 

希望这有助于为将来有人!