GWT: кнопка "Назад" работает дважды, как в браузере, так и в моем коде GWT

Сценарий:

В моем веб-приложении GWT я использую KeyDownHandler, чтобы зафиксировать событие нажатия пользователем Backspace. Скажем, я использую его на виджете «B», и нажатие кнопки «backpsace», когда виджет «B» сфокусирован, должно привести меня к виджету «A».

Проблема:

При нажатии Backspace я попадаю в виджет «А», НО только на мгновение, прежде чем браузер вернет меня на предыдущую страницу! Я хочу, чтобы мое событие backspace использовалось только моим (GWT) кодом, а не браузером.


person Chemical X    schedule 26.04.2013    source источник


Ответы (2)


final TextBox txtA = new TextBox();
    TextBox txtB = new TextBox();

    VerticalPanel testPanel = new VerticalPanel();
    testPanel.add(txtA);
    testPanel.add(txtB);

    txtB.addKeyDownHandler(new KeyDownHandler() {

        public void onKeyDown(KeyDownEvent event) {
            if(event.getNativeKeyCode() == KeyCodes.KEY_BACKSPACE){
                Scheduler.get().scheduleDeferred(new ScheduledCommand() {

                    public void execute() {
                        txtA.setFocus(true);
                    }
                });
            }
        }
    });

    RootPanel.get().add(testPanel);

Этот сообщение SO может быть вам полезен. Однако все же лучше использовать shift + tab для перехода назад в веб-форме IMHO.

person David    schedule 26.04.2013

Возможно, вам придется запретить выполнение действия по умолчанию. И вам, возможно, придется сделать это для некоторых или всех ключевых событий (нажатие клавиши, нажатие клавиши –в Firefox–, нажатие клавиши); обязательно протестируйте как можно больше браузеров!

При этом захват глобальных сочетаний клавиш рассматривается многими пользователями как слишком навязчивый; и это может повлиять на доступность вашего приложения.

person Thomas Broyer    schedule 26.04.2013