在GWT“更改”浏览器事件(“Change” browser event in GWT)

2019-11-01 05:52发布

我在GWT创建表和列的一个包含有输入细胞。 我想获得信息时,文字输入的变化。 在我的手机我重载render()onBrowserEvent()方法。 下面的代码:

public HourPickerCell() {
    super("change", "keyup");
}

@Override
public void render(Context context, String value, SafeHtmlBuilder sb) {
    if (value == null) {
        return;
    }
    sb.appendHtmlConstant("<input class=\"hourPicker\" type=\"text\" value=\"" + value + "\"></input>");        
}


@Override
public void onBrowserEvent(Context context, Element parent, String value, NativeEvent event, ValueUpdater<String> valueUpdater) {
    System.out.println(event.getType());
    super.onBrowserEvent(context, parent, value, event, valueUpdater);

    if (event.getType().equals("change")) {
        EventTarget eventTarget = event.getEventTarget();
        if (!Element.is(eventTarget)) {
            return;
        }
        if (parent.getFirstChildElement().isOrHasChild(Element.as(eventTarget))) {
            InputElement input = (InputElement) parent.getFirstChild();
            valueUpdater.update(input.getValue());
        }
    }       
}

正如你可以看到我试图抓住change事件。 一切是在Firefox和Chrome确定。 当我写输入一些东西,标签到其他细胞,我得到在控制台以下结果:

keyup keyup keyup keyup keyup keyup keyup change keyup

事件之一是“改变” - 这正是我需要的。 可惜的是在Internet Explorer上我只得到:

keyup keyup keyup keyup keyup keyup keyup

没有变化的事件。 谁能告诉我问题出在哪里? 有没有什么办法解决?

Answer 1:

在Internet Explorer中, change事件不冒泡[1],所以你要听权的事件input元素。 其他浏览器都实现了HTML5的行为,其中一个change事件冒泡[2]。

我不知道正确的修复了手,但你可能会更好地使用或复制TextInputCell这已经做了所有的辛勤工作。

[1] http://msdn.microsoft.com/en-us/library/ie/ms536912(v=vs.85).aspx
[2] http://dev.w3.org/html5/spec/common-input-element-apis.html#event-input-change


作为一个侧面说明,你的render方法并不安全(如果什么value包含引号?)你可能想使用SafeHtmlUtilsSafeHtmlTemplates (见的代码TextInputCell



文章来源: “Change” browser event in GWT