【问题标题】:GWT input event on TextBoxTextBox 上的 GWT 输入事件
【发布时间】:2018-11-08 05:16:13
【问题描述】:

给定以下代码:

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

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

        }
    });

如果TextBox 失去焦点,将调用onValueChange。每当输入值发生变化时,我都会尝试调用它。我读过的解决方案都涉及处理 keyup 和 paste 事件,例如这个答案。 How to build a Facebook-style input box in GWT 这不是 GWT 2.5.1 中的地址吗?有没有办法绑定到本机输入更改方法?如果它们具有此功能,则可以接受其他小部件或使用 UI 框架

【问题讨论】:

标签: gwt


【解决方案1】:

GWT 中唯一的方法是绑定到按键按下/按键向上和粘贴事件。

请发送一个补丁来添加对输入事件的支持(使用addBitlessDomHandler):http://www.gwtproject.org/makinggwtbetter.html,它应该很容易(在DOMImpl 中添加一个case)并且很有可能实现它(如果发送得足够早,很有可能在 GWT 2.6 中发布)

【讨论】:

    【解决方案2】:

    解决方案是使用正确的事件,即input 事件,所以看看如何挂钩它,有很多方法可以做到。因为我使用元素而不是小部件,所以我使用它的代码:

        Element input = Document.get().getElementById("my-input");
        DOM.sinkBitlessEvent(input, "input");
        DOM.setEventListener(input, event -> GWT.log("Event!"));
    

    【讨论】:

      【解决方案3】:

      您可以只使用addChangeHandler() 和 onChange,tb.getValue()

      【讨论】:

      • 不,这和上面的问题一样。它仅在元素失去焦点时调用。
      • 对不起,我误解了你的问题。正如@enrybo 所说,KeyUpHandler 将不得不这样做。如果您查看SuggestBox,他们会立即使用KeyUpHandler 请求建议
      • @Emmentaler 我研究了 GWT 事件系统。根据com.google.gwt.user.client.impl.DOMImpl.eventGetTypeInt(String)方法,原生javascriptchange事件对应的GWT handler为ChangeHandler,由com.google.gwt.user.client.ui.Widget.onBrowserEvent(Event)确定。
      【解决方案4】:

      我使用以下方法来检测文本框的值何时发生变化。请记住,这只检测文本框是从空到满还是从满到空。这样做是为了尝试减少对服务器的异步调用以验证输入

      @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;
              }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-23
        • 1970-01-01
        • 1970-01-01
        • 2015-03-07
        • 2011-03-07
        • 2012-02-13
        • 1970-01-01
        相关资源
        最近更新 更多