主题: 请问 如何给编辑器加上onpaste事件?
作者: jason, 发布日期: 2010-05-06 17:59:29, 浏览数: 8974
因为每次粘贴word过来的文字都会有一大堆的垃圾代码
所以我想当用户粘贴的时候,自动打开“粘贴无格式文本”的窗口

请问如何给编辑器加上 onpaste事件?多谢!
作者: Roddy, 发布日期: 2010-05-06 23:21:27
粘贴方式有很多种,Ctrl+V快捷键,通过浏览器菜单粘贴,右键菜单粘贴等,Ctrl+V事件能处理,但后两者用JS好像没方法控制。
回复
作者: jason, 发布日期: 2010-05-07 12:05:17
Roddy大哥终于回复了!
我的js水平实在有限。
刚刚尝试在“KE.create”里对iframeDoc添加事件:
KE.event.add(iframeDoc, 'paste', function(){
  alert(1);
  return false;
});
这样是可以捕获到粘贴事件的,alert(1);可以弹出,但是这个return false是无法生效的。
不知道如何删除或者说修改iframeDoc原来的粘贴事件,让它原来的onpaste返回false?

编辑器的iframe及里面的html、body,都是用js动态插入的,我使用
iframeDoc.onpaste = function(){alert(2);return false;};
是不行的,而且这个alert(2);也是弹不出来的。

回复
作者: jason, 发布日期: 2010-05-07 14:38:28
找到了一种解决办法,效果是当用户粘贴时,自动弹出“粘贴无格式文本”窗口,代码:
KE.show({
    id : 'txt',
    afterCreate : function(){
        cantPaste(this.id);
    }
});

function cantPaste(id){
    KE.event.add(KE.g[id].iframeDoc.body, 'paste', function(e) {
        KE.plugin['plainpaste'].click(id);
        if(e.preventDefault) e.preventDefault();
        return false;
    });
}

cantPaste函数给指定的编辑器内部的body加上paste事件,并且在弹出“粘贴无格式文本”窗口后,停止这个事件后面要做的事。

但是,在执行下面代码后事件就没了:(解决办法是再次调用cantPaste从新添加事件)
KE.clearEditor = function(id) {
    KE.g[id].iframeDoc.open();
    KE.g[id].iframeDoc.write(KE.util.getFullHtml(id));
    KE.g[id].iframeDoc.close();
    KE.g[id].newTextarea.value = '';
}

但是目前还有个小问题:
如何在弹出“粘贴无格式文本”窗口后,让窗口中的textArea获取焦点。
回复
作者: Roddy, 发布日期: 2010-05-13 21:12:10
刚测试了一下,Firefox、Chrome最新版都支持onpaste事件,Oprera还不支持,看来非IE浏览器和IE的差别越来越小。
回复
发表新帖 发表回复