我在GWT中创建表格,其中一列包含具有输入的单元格。我希望在输入文字改变时获得信息。在我的单元格中,我重载render()
和onBrowserEvent()
方法。代码如下:GWT中的“更改”浏览器事件
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
没有改变事件。 有谁能告诉我问题在哪里?有什么方法可以解决它吗?
使用'TextInputCell'我只在Internet Explorer中获得'keyup'和'keydown'事件。在Firefox和铬仍然一切都好。我知道我的解决方案是不安全的 - 我会改变它:) – mchrobok
但是'AbstractInputCell'也处理'blur',并且'change'被模糊处理,所以... –
是的,我同意,因为在Chrome和Firefox中我得到所有事件 - keydown,keyup,change,blur,focus。但IE仍然只产生'keyup'和'keydown'事件 – mchrobok