GWT でテーブルを作成し、列の 1 つに入力を持つセルが含まれています。入力のテキストが変化したときに情報を取得したいと思います。私のセルでは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
イベントの 1 つは「変更」です。これが必要です。残念ながら、Internet Explorer では次のメッセージしか表示されません。
keyup
keyup
keyup
keyup
keyup
keyup
keyup
変更イベントはありません。誰が問題がどこにあるのか教えてもらえますか? それを修正する方法はありますか?