Отмена GWT-события для следующих хендлеров - PullRequest
2 голосов
/ 16 июня 2011

Я хочу отменить событие для следующих обработчиков. Пример класса ниже показывает, что я пытаюсь. Несмотря на то, что keyevent отменяется для текстового поля, второй обработчик все еще вызывается. порядок обработчиков правильный. я могу доказать, что Handler1 вызывается перед Handler2. в этом примере класса я мог бы использовать флаг, но в моем реальном классе обработчики и текстовое поле разделены, поэтому флаги будут проблемой. есть идеи?

public class EventTestTextBox extends TextBox {

    public static class Handler1 implements KeyUpHandler {
        @Override
        public void onKeyUp(KeyUpEvent event) {
            if (event.isShiftKeyDown()) {
                event.preventDefault();
                event.stopPropagation();
                ((TextBox)event.getSource()).cancelKey();
            }
        }
    }

    public static class Handler2 implements KeyUpHandler {
        @Override
        public void onKeyUp(KeyUpEvent event) {
            Window.alert("should not appear if shift-key is down.");
        }
    }

    public EventTestTextBox() {
        super.addKeyUpHandler(new Handler1());
        super.addKeyUpHandler(new Handler2());
    }

}

Ответы [ 2 ]

0 голосов
/ 10 сентября 2012

У меня точно такой же вопрос, как и у вас.Вам удалось найти решение?

Полагаю, что единственным решением было бы не зарегистрировать прослушиватель событий и позволить вместо этого обработчику 1 отправлять (или нет) обработчику 2.

0 голосов
/ 16 июня 2011

event.stopPropagation() отменяет всплывающее событие , то есть предотвращает запуск обработчиков на родительских элементах. Это не мешает обработчикам на одном элементе получать событие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...