给出以下代码:
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中的地址吗?有没有办法绑定到本机输入更改方法?如果具有此功能,则可以接受另一个小部件或使用UI框架
答案 0 :(得分:3)
GWT中唯一的方法是绑定密钥/密钥并粘贴事件。
请发送补丁以添加对输入事件的支持(使用addBitlessDomHandler
):http://www.gwtproject.org/makinggwtbetter.html,它应该相当简单(在case
中添加DOMImpl
)和有很好的机会进入(如果发送得足够早,将有很好的机会在GWT 2.6中发货)
答案 1 :(得分:1)
解决方案是使用正确的事件,即input
事件,因此,请看如何挂钩它,有很多方法可以执行。因为我使用的是元素而不是Widget,所以我使用它的代码是
Element input = Document.get().getElementById("my-input");
DOM.sinkBitlessEvent(input, "input");
DOM.setEventListener(input, event -> GWT.log("Event!"));
答案 2 :(得分:0)
您可以使用addChangeHandler()
和onChange,tb.getValue()
。
答案 3 :(得分: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;
}
}