0

私はRichTextAreaを持っています

 private RichTextArea richTextArea;

そして、次のような貼り付けイベントをキャプチャしようとしています:

DOM.sinkEvents((com.google.gwt.user.client.Element) richTextArea.getElement(), com.google.gwt.user.client.Event.ONPASTE);
DOM.setEventListener((com.google.gwt.user.client.Element) richTextArea.getElement(), new EventListener(){
  @Override public void onBrowserEvent(Event event) {
     switch (event.getTypeInt()) {
        case Event.ONPASTE: Window.alert("hey");break;
     }
   }
});

RichTextArea にテキストを貼り付けると、アラートがトリガーされません。

この貼り付けイベントをキャプチャする方法はありますか?

ありがとう!

4

3 に答える 3

1

のレンダリングされた HTML を見たことがありますRichTextAreaか? それiframeは実際のtextarea inputタイプではありません。要素の下にユーザー入力を設定しますbodyonpasteそのため、シンクされたイベントは発生しません。たとえばonpasteTextAreaウィジェットで聞くと正常に動作します。

private static class MyTextArea extends TextArea
    {
        public MyTextArea()
        {
            sinkEvents(Event.ONPASTE);              
        }

        @Override
        public void onBrowserEvent(Event event)
        {
            if(event.getTypeInt() == Event.ONPASTE)
            {
                Window.alert("text pasted !");
            }
            super.onBrowserEvent(event);
        }
    }

おそらく、JSNIを使用してハンドラーをそのiframeボディ要素にバインドし、そのイベントでコールバックを取得できます(試したことはありません)

于 2013-05-25T22:58:56.210 に答える
0

完全を期すために、ネイティブ (JSNI) ソリューションは次のようになります。

setPastehandler(richTextArea.getElement());

private native void setPasteHandler(Element e) /*-{
    e.contentDocument.onpaste = function (event) {
        alert("pasted!");
    };
}-*/;
于 2016-03-03T15:53:35.783 に答える