Событие TextField «Change» срабатывает только при размытии - PullRequest
5 голосов
/ 06 мая 2011

Обычно событие Change срабатывает после того, как TextField теряет фокус (при размытии).

Но мне нужно, чтобы оно срабатывало, как только изменяется значение поля, без необходимости терять фокусна поле.

KeyListener не обрезает его, потому что значение может исходить, например, от сканера штрих-кода.

Есть ли способ сделать это?

Заранее спасибо!

Ответы [ 2 ]

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

Я не работал с ext-gwt, но это то, что вы должны сделать: вы должны использовать KeyListener и добавить прослушиватель для ONPASTE. Событие «Изменить» предоставляется браузером и вызывается только тогда, когда фокус исчезает (во время размытия) и если текст изменился.

0 голосов
/ 07 мая 2011

Я не думаю, что есть событие, которое работает в разных браузерах. Таким образом, «решение бедняка» заключается в опросе текстового поля каждую секунду или около того. На самом деле, такой тест можно выполнить довольно быстро, и если вы не используете его сразу для большого количества текстовых полей, все будет в порядке.

Вы можете использовать мой маленький пример кода, если хотите (он работает на обычном текстовом поле GWT, но его легко адаптировать к Ext-GWT TextField)

@Override
public void onModuleLoad() {

    final TextBox textBox = new TextBox();
    final int delayMilliseconds = 1000;

    Scheduler.get().scheduleFixedDelay(new RepeatingCommand() {

        private String previousValue = "";

        @Override
        public boolean execute() {

            final String newValue = textBox.getValue();
            if (!previousValue.equals(newValue)) {
                try {
                    valueChanged();
                } finally {
                    previousValue = newValue;
                }
            }
            return true;
        }

        private void valueChanged() {
            // React on the change
            Window.alert("Value changed");
        }

    }, delayMilliseconds);

    RootPanel.get().add(textBox);
}
...