Как я могу предотвратить распространение клавиш - PullRequest
3 голосов
/ 15 декабря 2011

У меня есть стек просмотра, который реализует интерфейс «мастера» для выполнения новых заказов. На последней странице мастера есть кнопка с фальшивым ускорителем, с помощью которой, если они нажмут 'o', они смогут начать процесс заново.

Ниже мой обработчик:

        protected function _keyDownHandler(e:KeyboardEvent):void
        {
            if((e.charCode == 111)) {
                // stop the 'o' from getting out 
                trace("Cancelable : " , e.cancelable);
                this.removeEventListener(KeyboardEvent.KEY_DOWN, _keyDownHandler, true);
                e.stopImmediatePropagation();
                e.preventDefault();
                model.orderNew();
            }

        }

Проблема в том, что когда пользователь возвращается на страницу 1 мастера, только что набранный пользователь вводит «o» в текстовое поле фильтрации сетки данных (фильтр по фамилиям, начинающимся с «o»), что не что желательно.

Как вы можете видеть, я предпринял несколько попыток запретить это взаимодействие, но этого недостаточно, хотя бит model.orderNew() содержит весь код для обмена страницами стека просмотра, переустанавливая фокус в txtSearchFilter и т. д. Я в тупике!

Похоже, что e.cancelable == false, возможно, именно поэтому я и получаю такое поведение ... но в документации говорится, что KEY_DOWN IS отменяется, так что ... я все еще потерялся.

Как я могу предотвратить распространение нажатия клавиши на форму?

Спасибо

Ответы [ 3 ]

1 голос
/ 15 декабря 2011

Проверьте эту тему:

http://forums.adobe.com/thread/434862

Похоже, что и события KEY_DOWN, и KEY_UP не могут быть отменены во флэш-плеере.

1 голос
/ 15 декабря 2011

Вы можете попытаться изменить слушателя на использование режима «захвата» вместо пузырей.

addEventListener(KeyboardEvent.KEY_DOWN, _keyDownHandler, true);

См. Ссылку AS3 на addEventListener () для получения дополнительной информации.


РЕДАКТИРОВАТЬ: На самом деле, это не может быть прямой проблемой. Вместо этого вам может потребоваться отменить событие KEY_UP и сделать это для общего предка представлений. Вам все равно нужно использовать режим захвата.
0 голосов
/ 15 декабря 2011

if ((e.charCode == 111)) {removeEventListener (KeyboardEvent.KEY_DOWN ...}

, а затем снова включите его, когда он вам понадобится снова, когда вы захотите (например, когда вы фокусируетекакое-то другое поле)

...