2

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

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

7 回答 7

7

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

我试过了:

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

于 2010-02-09T16:16:19.347 回答
4

handleFocusIn应该有签名

function handleFocusIn(event:FocusEvent) // or just Event
于 2009-07-10T12:34:45.773 回答
2

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

使用舞台上的 Button 组件,我只有在第一次单击它时才会收到 FOCUS_IN 事件。之后,我既不会触发 FOCUS_OUT 也不会触发 FOCUS_IN 事件。

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

于 2009-07-21T11:37:07.800 回答
2

我正在像这样做我的处理程序。奇迹般有效:

private function onFocusIn(e:FocusEvent):void 
{
    setTimeout(title.setSelection, 100, 0, e.target.text.length);           
}
于 2010-02-25T21:13:11.187 回答
0

你会发现用户没有选择像这样的部分文本:

private function clickHandler(e:MouseEvent){
    if(tfield.selectionBeginIndex == tfield.selectionEndIndex){
        tfield.setSelection(0, tfield.length);
    }
}
于 2013-07-09T17:50:20.890 回答
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;
}

希望这对将来的人有所帮助!

于 2013-08-11T14:51:58.670 回答
0

您只是忘记了捕获事件的 var。它应该在函数定义中的括号之间。最简单的方法就是直接称它为“e”而无需进一步定义,就像我在这里所做的那样。有用:

txtTextField.addEventListener(FocusEvent.FOCUS_IN, handleFocusIn);
function handleFocusIn(e) {
 //select all text here
}
于 2019-04-10T23:14:43.940 回答