AS3:TextField Focus

时间:2009-07-10 12:24:18

标签: actionscript-3 focus textfield

我正在尝试在TextField上处理焦点事件,因此我可以在聚焦时选择所有文本(制表符或单击)。好像我在这里做错了什么?

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

7 个答案:

答案 0 :(得分:5)

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

我试过了:

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对象添加了一个选项,那将是最符合逻辑的。

答案 1 :(得分:4)

您的handleFocusIn应该有签名

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

答案 2 :(得分:2)

我在开发的原型阶段遇到了类似的问题(在Flash中)。 文本字段根本没有触发FocusEvent.FOCUS_OUT事件。 问题是我在舞台上有一个Button组件。 一旦我用从头开始创建的自定义按钮替换了该Flash按钮组件实例,我就让它工作了。 我无法通过互联网找到这个错误和解决方案。

在舞台上使用Button组件时,我第一次点击它时会收到FOCUS_IN事件。 之后我没有得到FOCUS_OUT和FOCUS_IN事件。

我希望这会以任何方式帮助某人。

答案 3 :(得分:2)

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

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

答案 4 :(得分:0)

你可以发现用户不会只选择这样的部分文字:

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

答案 5 :(得分:0)

简单的解决方案是:

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;
}

希望将来对某人有所帮助!

答案 6 :(得分:0)

您只是忘记了捕获事件的变量。 它应该在函数定义的括号之间。 最短的方法就是不加定义就将其称为“ e”,就像我在这里所做的那样。 它的工作原理:

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