Поведение выбора DropDownList при использовании клавиатуры в Air / Flex - PullRequest
1 голос
/ 11 мая 2011

Допустим, у меня есть DropDownList с 50 состояниями.Я хотел бы набрать буквы " C + O + L ", чтобы перейти в Колорадо, как это делает Firefox и большинство приложений.

Сейчас он прыгает из Калифорнии в Огайо и заканчивается Луизианой ... Кто-нибудь знает простой способ сделать это?

Большое спасибо!

Ответы [ 3 ]

1 голос
/ 11 мая 2011

Вы можете попытаться создать пользовательский компонент, который расширяет DropDownList и переопределяет функцию-нарушитель, чтобы добавить ваши собственные функциональные возможности, которые вы хотите. Это единственный способ изменить функциональность по умолчанию.

1 голос
/ 12 мая 2011

Как и предложенный @J_A_X, я изменил класс DropDownList, добавив таймер, который хранит строку, набранную пользователем, в течение ¾ секунд, а затем сбрасывает ее. Вот мое решение:

package MyComps
{
    import flash.events.TimerEvent;
    import flash.utils.Timer;
    import flash.utils.setTimeout;

import mx.core.mx_internal;

import spark.components.DropDownList;

use namespace mx_internal;

public class DropDownListKeyboardSelection extends DropDownList
{

    private var _duration:Number = 750; // Time in milliseconds before the _str is resetted
    private var _timer:Timer;
    private var _str:String = '';

    public function DropDownListKeyboardSelection()
    {
        super();
    }

    override mx_internal function findKey(eventCode:int):Boolean
    {
        if (!dataProvider || dataProvider.length == 0)
            return false;

        if (eventCode >= 33 && eventCode <= 126)
        {
            var matchingIndex:Number;
            var keyString:String = String.fromCharCode(eventCode);

            // Freshly instantiated or resetted by timerEnded(). In that case, we start the timer
            if (_str == '') {
                startTimer();
            }   else {
                _timer.reset();
                startTimer();
            }

            // Building the string to find
            _str += keyString;

            matchingIndex = findStringLoop(_str, 0, dataProvider.length); 

            // We didn't find the item, loop back to the top 
            if (matchingIndex == -1)
            {
                matchingIndex = findStringLoop(keyString, 0, 0); 
            }

            if (matchingIndex != -1)
            {
                if (isDropDownOpen)
                    changeHighlightedSelection(matchingIndex);
                else
                    setSelectedIndex(matchingIndex, true); 

                return true;
            }

        }

        return false;
    }

    // Let's start the _timer
    private function startTimer():void
    {
        _timer = new Timer(_duration);  
        _timer.addEventListener(TimerEvent.TIMER, timerEnded);
        _timer.start();
    }

    // Timer ended, let's reset the _str variable
    private function timerEnded(event:TimerEvent):void
    {   
        _str = '';
        _timer.reset();
    }

} 
}
0 голосов
/ 11 мая 2011

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

...