0

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

変更イベントはありません。誰が問題がどこにあるのか教えてもらえますか? それを修正する方法はありますか?

4

1 に答える 1

0

Internet Explorerでは、changeイベントはバブルしない[1]ため、要素でイベントを直接聞く必要がありinputます。change他のブラウザはすべて、イベントがバブルするHTML5の動作を実装しています[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引用符が含まれている場合はどうなりますか?)SafeHtmlUtilsまたはを使用することをお勧めしますSafeHtmlTemplates(のコードを参照TextInputCell

于 2012-11-19T11:59:46.820 に答える