在contenteditable中检测粘贴事件

Rac*_*ows 27 html javascript jquery html5 contenteditable

给出一个内容可编辑的div.如何检测粘贴事件,防止粘贴被插入,以便我可以拦截和清理粘贴以仅包含文本?

粘贴+清理完成后,我也不想失去焦点.

dcr*_*cro 23

更新:

现在,所有主流浏览器都允许您在粘贴事件中访问剪贴板数据.有关新浏览器的示例,请参阅Nico Burns的答案,如果您需要支持旧浏览器,请查看Tim Down的答案.


您可以在div上侦听onPaste事件以检测粘贴.如果您只想禁用粘贴,可以event.preventDefault()从该侦听器调用.

但要捕获粘贴的内容有点困难,因为该onPaste事件不允许您访问粘贴的内容.处理此问题的常用方法是从onPaste事件处理程序执行以下操作:

  • 创建一个虚拟div并将其放在窗口边界之外,这样访问者就无法看到它
  • 把焦点转移到这个div
  • 使用a调用清洁剂方法 setTimeout(sanitize, 0)

从你的消毒方法:

  • 找到虚拟div并获取它的内容
  • 清理HTML并删除div
  • 将焦点移回原始div
  • 将已清理的内容插入原始div中

  • 这是另一个非常受欢迎的解决方案,已通过浏览器测试http://stackoverflow.com/questions/2176861/javascript-get-clipboard-data-on-paste-event-cross-browser (3认同)
  • `paste` 事件在某些浏览器中进行这种重定向为时已晚,但总体思路是可行的。 (2认同)