AS3: фокус текстового поля

Я пытаюсь обработать событие фокуса в TextField, поэтому я могу выбрать весь текст при фокусировке (вкладка или щелчок). Кажется, я делаю что-то не так здесь?

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

person Yens    schedule 10.07.2009    source источник


Ответы (7)


Мне нужно было то же самое, чтобы выбрать содержимое текстового поля, когда оно получает фокус.

Я старался:

A) Простой выбор после FocusEvent. Похоже, это не работает (я предполагаю, что FocusEvents запускаются до обработки щелчка мыши, что, в свою очередь, отменяет выбор).

Б) Выбор при каждом щелчке мыши. Это работает, но это очень раздражает пользователя, который хочет позже выбрать только часть текста, поскольку эта попытка всегда будет приводить к выделению всего содержимого.

Однако следующий обходной путь, похоже, работает:

    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.

person Mattijs    schedule 09.02.2010

Ваш handleFocusIn должен иметь подпись

function handleFocusIn(event:FocusEvent) // or just Event
person Vinay Sajip    schedule 10.07.2009

У меня была похожая проблема на этапе разработки прототипа (во Flash). Текстовое поле вообще не запускало события FocusEvent.FOCUS_OUT. Проблема была в том, что у меня был компонент Button на сцене. Как только я заменил этот экземпляр компонента flash Button пользовательской кнопкой, созданной с нуля, я заставил ее работать. Я не смог найти эту ошибку и решение в Интернете.

С компонентом Button на сцене я получаю событие FOCUS_IN только при первом нажатии на него. После этого я не получаю ни событий FOCUS_OUT, ни FOCUS_IN.

Я надеюсь, что это поможет кому-то в любом случае.

person vitaLee    schedule 21.07.2009

Я делаю свой обработчик так. Работает как шарм:

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

вы можете обнаружить, что пользователь не выбирает только часть текста, например:

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

Простое решение:

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

Надеюсь, что это поможет кому-то в будущем!

person aconma.com    schedule 11.08.2013

Вы просто забыли переменную, которая перехватывает событие. Он должен быть заключен в скобки в определении функции. Кратчайший путь — просто назвать его «е» без дальнейших определений, как я сделал здесь. Оно работает:

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