Нажатие ввода в TextBox в Google Web Toolkit в Firefox вызывает отправку формы, но не IE - PullRequest
3 голосов
/ 16 марта 2011

gwt 1.6.4, т.е. 8 и 3.6.6

Мои пользователи хотят иметь возможность нажать Enter, чтобы отправить форму в текстовом окне gwt. Итак, я написал код, получил его работать и обнаружил, что он дважды представлен (в Firefox) Поэтому я взял его и заметил, что нажатие клавиши enter в firefox вызывает отправку страницы, но в IE это не так.

Так что либо он у меня наполовину работает (один из двух популярных браузеров), либо он работает в ie и дважды отправляет в Firefox.

Предложения? Я видел много комментариев по этому поводу, но ничего особенного для gwt.

Ответы [ 2 ]

6 голосов
/ 24 сентября 2012
input.addKeyPressHandler(new KeyPressHandler()
            {
                @Override
                public void onKeyPress(KeyPressEvent event_)
                {
                    boolean enterPressed = KeyCodes.KEY_ENTER == event_
                            .getNativeEvent().getKeyCode();
                    if (enterPressed)
                    {
                        //submit logic here
                    }
                }
            });
1 голос
/ 17 марта 2011

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

protected final KeyPressHandler submitOnEnterHandler = new KeyPressHandler()
    {
        @Override
        public void onKeyPress(KeyPressEvent event)
        {
            char charCode = event.getCharCode();
            if (submitOnEnter && (charCode == '\n' || charCode == '\r'))
            {
                final Object source = event.getSource();
                final String beforeText;
                if (source instanceof TextBoxBase)
                    beforeText = ((TextBoxBase) source).getText();
                else
                    beforeText = null;
                Scheduler.get().scheduleDeferred(new ScheduledCommand()
                {
                    @Override
                    public void execute()
                    {
                        String afterText;
                        if (source instanceof TextBoxBase)
                            afterText = ((TextBoxBase) source).getText();
                        else
                            afterText = null;
                        if (beforeText.equals(afterText))
                            submit();
                    }
                });
            }
        }
    };
...