GWT文本框上的即时值更改处理程序

Jla*_*Jla 25 events gwt textbox

我想在键入GWT TextBox时立即更新文本字段.我的问题是ValueChangeEvent和ChangeEvent处理程序仅在TextBox失去焦点时触发.我想过使用KeyPressEvent但是用鼠标执行复制粘贴时什么都不会发生.

最简单的方法是什么?

z00*_*0bs 33

您可以捕获ONPASTE事件并手动触发ValueChangeEvent.像这样的东西:

public void onModuleLoad() {
    final Label text = new Label();
    final ExtendedTextBox box = new ExtendedTextBox();
    box.addValueChangeHandler(new ValueChangeHandler<String>() {

        @Override
        public void onValueChange(ValueChangeEvent<String> event) {
            text.setText(event.getValue());
        }

    });
    box.addKeyUpHandler(new KeyUpHandler() {

        @Override
        public void onKeyUp(KeyUpEvent event) {
            text.setText(box.getText());
        }
    });

    RootPanel.get().add(box);
    RootPanel.get().add(text);
}

private class ExtendedTextBox extends TextBox {

    public ExtendedTextBox() {
        super();
        sinkEvents(Event.ONPASTE);
    }

    @Override
    public void onBrowserEvent(Event event) {
        super.onBrowserEvent(event);
        switch (DOM.eventGetType(event)) {
            case Event.ONPASTE:
                Scheduler.get().scheduleDeferred(new ScheduledCommand() {

                    @Override
                    public void execute() {
                        ValueChangeEvent.fire(ExtendedTextBox.this, getText());
                    }

                });
                break;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在firefox 3.6.1上测试过.

  • 很好的答案,但在最新版本的GWT中,DeferredCommand已被弃用,而不是Scheduler.get().scheduleDeferred(...) (2认同)