2013-10-05 2 views
3

Учитывая следующий код:GWT события ввода на TextBox

TextBox tb = new TextBox(); 
    tb.addValueChangeHandler(new ValueChangeHandler<String>() { 

     @Override 
     public void onValueChange(ValueChangeEvent<String> event) { 
      Window.alert(event.getValue()); 

     } 
    }); 

onValueChange будет называться, если TextBox теряет фокус. Я пытаюсь вызвать его при каждом изменении входного значения. Решения, которые я прочитал, включают обработку событий keyup и вставки, таких как в этом ответе. How to build a Facebook-style input box in GWT Разве это не адреса в GWT 2.5.1? Есть ли способ привязки к собственному методу изменения ввода? Другой виджет или использование интерфейса пользовательского интерфейса будет приемлемым, если у них есть эта функция.

+1

Я действительно думаю, что обработчик keyup - лучший способ пойти в данный момент. – enrybo

ответ

2

Единственный способ в GWT - связать с клавишей вниз/клавишей вверх и вставить события.

Пожалуйста, пришлите патч, чтобы добавить поддержку для события ввода (с помощью addBitlessDomHandler): http://www.gwtproject.org/makinggwtbetter.html, это должно быть довольно легко (добавить аа case в DOMImpl) и имеет хорошие шансы сделать это в (и если они отправлены достаточно рано, будет имеют хорошие возможности для отправки в GWT 2.6)

0

Вы можете использовать только addChangeHandler() и onChange, tb.getValue().

+0

Нет, у этой проблемы есть такая же проблема, как и выше. Он вызывается только тогда, когда элемент теряет фокус. –

+1

Извините, я неправильно понял ваш вопрос. Как сказал @enrybo, «KeyUpHandler» должен будет сделать. Если вы посмотрите в 'SuggestBox', они немедленно запросят предложения с помощью« KeyUpHandler » – Churro

+0

@Emmentaler. Я просмотрел систему событий GWT. Согласно методу 'com.google.gwt.user.client.impl.DOMImpl.eventGetTypeInt (String)', обработчик GWT, соответствующий собственному событию javascript 'change', является' ChangeHandler', как определено 'com.google .gwt.user.client.ui.Widget.onBrowserEvent (Event) '. – Churro

0

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

@UiHandler("notes") 
    @SuppressWarnings("unused") 
    public void notes(KeyUpEvent event) { 
     if (!areNotesCaptured && !notes.getText().isEmpty()){ 
      fireLeaveSelectionUpdatedEvent(); 
      areNotesCaptured = true; 
     } else if (areNotesCaptured && notes.getText().isEmpty()){ 
      fireLeaveSelectionUpdatedEvent(); 
      areNotesCaptured = false; 
     } 
    } 
Смежные вопросы