Events RichTextArea或IFrame中的GWT捕获事件

Events RichTextArea或IFrame中的GWT捕获事件,events,gwt,copy-paste,richtextarea,Events,Gwt,Copy Paste,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)richTex

我有一个富裕的地区

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(){
@重写公共void onBrowserEvent(事件){
开关(event.getTypeInt()){
case Event.ONPASTE:Window.alert(“嘿”);break;
}
}
});
但它不起作用,当我在richTextArea上粘贴文本时,不会触发警报

知道如何捕获此粘贴事件吗


谢谢

您看过
RichTextArea
的呈现HTML吗?它是
iframe
而不是实际的
textarea输入类型。它在
主体
元素下设置用户输入。因此,这就是为什么您不会陷入粘贴事件。例如,如果您在
TextArea
小部件上收听
onpaste
,它可以正常工作

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 body元素,并获取该事件的回调(不过还没有尝试过)

您是否看到了
RichTextArea
的呈现HTML?它是
iframe
而不是实际的
textarea输入类型。它在
主体
元素下设置用户输入。因此,这就是为什么您不会陷入粘贴事件。例如,如果您在
TextArea
小部件上收听
onpaste
,它可以正常工作

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 body元素,并获取该事件的回调(虽然还没有尝试过)

您不能将该事件添加到
RichTextArea
,它实际上是一个
iframe
,而是添加到它的body

虽然您可以使用
jsni
,但我会使用,因为它很简单:

//首先将小部件附加到DOM
RootPanel.get().add(richTextArea);
//我们只能将事件绑定到内容,一旦创建了iframe文档,
//这是在它被连接之后发生的。请注意,richtTextArea使用超时
//为了初始化,我们还必须延迟事件绑定
$(richTextArea).delay(1,lazy().contents().find(“body”).bind(Event.ONPASTE,new Function()){
@重写公共布尔值f(事件e){
Window.alert(“OnPaste”);
返回true;
}
}).done());

您不能将事件添加到
RichTextArea
,它实际上是一个
iframe
,但添加到它的主体中

虽然您可以使用
jsni
,但我会使用,因为它很简单:

//首先将小部件附加到DOM
RootPanel.get().add(richTextArea);
//我们只能将事件绑定到内容,一旦创建了iframe文档,
//这是在它被连接之后发生的。请注意,richtTextArea使用超时
//为了初始化,我们还必须延迟事件绑定
$(richTextArea).delay(1,lazy().contents().find(“body”).bind(Event.ONPASTE,new Function()){
@重写公共布尔值f(事件e){
Window.alert(“OnPaste”);
返回true;
}
}).done());

为了完整起见,本机(JSNI)解决方案类似于:

setPastehandler(richTextArea.getElement());
私有本机void setPasteHandler(元素e)/*-{
e、 contentDocument.onpaste=函数(事件){
警告(“粘贴!”);
};
}-*/;

为了完整起见,本机(JSNI)解决方案类似于:

setPastehandler(richTextArea.getElement());
私有本机void setPasteHandler(元素e)/*-{
e、 contentDocument.onpaste=函数(事件){
警告(“粘贴!”);
};
}-*/;