深入理解DOM事件类型系列第四篇——剪贴板事件

前面的话
剪贴板操作看起来不起眼,但却十分有用,可以增强用户体验,方便用户操作。本文将详细介绍剪贴板事件
定义
剪贴板操作包括剪切(cut)、复制(copy)和粘贴(paste)这三个操作,快捷键分别是ctrl+x、ctrl+c、ctrl+v。当然也可以使用鼠标右键菜单进行操作
关于这3个操作共对应下列6个剪贴板事件
copy:在发生复制操作时触发
cut:在发生剪切操作时触发
paste:在发生粘贴操作时触发
IE浏览器只有在文本中选定字符时,copy和cut事件才会发生。且在非文本框中(如div元素)只能发生copy事件
firfox浏览器只有焦点在文本框中才会发生paste事件
<input value="text" id="test"> <script> test.onpaste= test.oncopy = test.oncut = function(e){ e = e || event; test.value = e.type; return false; } </script>
beforecopy:在发生复制操作前触发
beforecut:在发生剪切操作前触发
beforepaste:在发生粘贴操作前触发
<input value="text" id="test"> <script> test.onbeforepaste= test.onbeforecopy = test.onbeforecut = function(e){ e = e || event; test.value = e.type; return false; } </script>
对象方法
剪贴板中的数据存储在clipboardData对象中。对于IE浏览器来说,这个对象是window对象的属性;对于其他浏览器来说,这个对象是事件对象的属性
e = e || event; var clipboardData = e.clipboardData || window.clipboardData;
这个对象有三个方法:getData()、setData()和clearData ()
getData()
getData()方法用于从剪贴板中取得数据,它接受一个参数,即要取得的数据的格式。在IE中,有两种数据格式:"text" 和 "URL"。在其他浏览器中,这个参数是一种MIME类型;不过,可以用"text"代表
[注意]在IE浏览器中,cut和copy事件中的getData()方法始终返回null;而其他浏览器始终返回空字符串''。但如果和setDada()方法配合,就可以正常使用
<input id="test" value="123"> <script> test.onpaste=function(e){ e = e || event; var clipboardData = e.clipboardData || window.clipboardData; test.value = '测试' + clipboardData.getData('text'); return false; } </script>
setData()
setData()方法的第一个参数也是数据类型,第二个参数是要放在剪贴板中的文本。对于第一个参数的规则与getData()相同
在IE浏览器中,该方法在成功将文本放到剪贴板中后,返回true,否则返回false;而其他浏览器中,该方法无返回值
[注意]在paste事件中,只有IE浏览器可以正常使用setData()方法,chrome浏览器会静默失败,而firefox浏览器会报错
<input id="test" value="123"> <script> test.oncopy=function(e){ e = e || event; var clipboardData = e.clipboardData || window.clipboardData; clipboardData.setData('text','测试'); test.value = clipboardData.getData('text'); return false; } </script>
clearData()
clearData()方法用于从剪贴板中删除数据,它接受一个参数,即要取得的数据的格式。在IE中,有两种数据格式:"text"和"URL"。在其他浏览器中,这个参数是一种MIME类型;不过,可以用"text"表示
在IE浏览器中,该方法在成功将文本放到剪贴板中后,返回true,否则返回false;而其他浏览器该方法的返回值为undefined
[注意]在paste事件中,chrome浏览器和IE浏览器可以正常使用setData()方法,而firefox浏览器会报错
<input id="test" value="123"> <script> test.oncopy=function(e){ e = e || event; var clipboardData = e.clipboardData || window.clipboardData; test.value = clipboardData.clearData('text'); return false; } </script>
应用
【1】屏蔽剪贴板
通过阻止默认行为来屏蔽剪贴板。对于一些受保护的文档来说是一种选择
<input value="text"> <button id="test">屏蔽剪贴板</button> <script> test.onclick = function(){ document.oncopy=document.oncut = document.onpaste = function(e){ e = e || event; alert('该文档不允许复制剪贴操作,谢谢配合') return false; } } </script>
【2】过滤字符
如果确保粘贴到文本框中的文本中包含某些字符,或者符合某种形式时,可以使用剪贴板事件。比如只允许粘贴数字
<input id="test"> <script> test.onpaste = function(e){ e = e || event; var clipboardData = e.clipboardData || window.clipboardData; if(!/^\d+$/.test(clipboardData.getData('text'))) return false; } } </script>
好的代码像粥一样,都是用时间熬出来的

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
2015-09-18 BOM之location对象