js的剪贴板事件
定义
剪贴板操作包括剪切(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>
js的剪贴板事件的更多相关文章
- JS 从剪贴板上传图片
用Ubuntu两年多了,习惯了Ubuntu的操作感觉比WIN用起来还爽,就一点不爽,生态应用很少,好多WIN上好用的软件在Ubuntu找不到的,希望以后的软件可以做到一次编译全平台通用. 即使用上Wi ...
- Node.js:events事件模块
Nodejs的大部分核心API都是基于异步事件驱动设计的,所有可以分发事件的对象都是EventEmitter类的实例. 大家知道,由于nodejs是单线程运行的,所以nodejs需要借助事件轮询,不断 ...
- js动态添加事件-事件委托
作者:白狼 出处:http://www.manks.top/javascript-dynamic-event.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给 ...
- 怎么理解js中的事件委托
怎么理解js中的事件委托 时间 2015-01-15 00:59:59 SegmentFault 原文 http://segmentfault.com/blog/sunchengli/119000 ...
- 深入理解DOM事件类型系列第四篇——剪贴板事件
× 目录 [1]定义 [2]对象方法 [3]应用 前面的话 剪贴板操作可能看起来不起眼,但是却十分有用,可以增强用户体验,方便用户操作.本文将详细介绍剪贴板事件 定义 剪贴板操作包括剪切(cut).复 ...
- js的touch事件的实际引用
一开始做前端页面的时候,接触的也是js,但是随后便被简单高效的jquery吸引过去,并一直使用至今. 而js,则被我主观的认为底层技术而抛弃. 直到这几天工作需要,研究移动端页面的触屏滑动事件,搜索j ...
- js性能优化-事件委托
js性能优化-事件委托 考虑一个列表,在li的数量非常少的时候,为每一个li添加事件侦听当然不会存在太多性能方面的问题,但是当列表非常的长,长到上百上千甚至上万的时候(当然只是一个解释,实际工作中很少 ...
- js /jquery停止事件冒泡和阻止浏览器默认事件
1>js阻止冒泡事件 var el = window.document.getElementById("a"); el.onclick = function (e) { // ...
- paip.调试js 查看元素事件以及事件断点
paip.调试js 查看元素事件以及事件断点 ff 26 +firebug 查看不出来.. 360 ,虽然也是chrome 基础,但是开发工具烂阿,也是显示不出来.. 作者Attilax 艾龙, ...
随机推荐
- linux及windows安装maven
一.linux安装maven 1.wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.1/binaries/apache-maven-3.6. ...
- 【分块】P4135 作诗
分块太暴力惹... 没做出来.看了题解qaq 分析: 两头$\sqrt{n}$暴力维护 预处理ans[i][j],sum[i][j] sum[i][j]是一个前缀和,前i块值为j的数量 ans[i][ ...
- re模块补充
)# 后面加数字代表前面多少个进行替换print(ret8) # stars466c7#7.subn() 会返回替换了多少次ret9=re.subn('\d','asd','sh8sd6sds7smm ...
- 前端-form表单与CSS
目录 form表单 表单属性 label标签 input标签 select 下拉框标签 textarea多行文本 提交 Flask 结合form表单 初探 CSS介绍以及基本选择器 基本选择器 组合选 ...
- 利用eclipse通过mybatis进行查询汉字字符时候无法显示结果,但是直接通过cmd窗口可以显示的解决方法
将数据库配置文件中的url写成如下的形式就可以成功查询: url = "jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&quo ...
- docker 安装 ElasticSearch
docker pull docker.elastic.co/elasticsearch/elasticsearch:5.6.9 docker images docker run -e ES_JAVA_ ...
- Vue Element 使用 icon 图标 (第三方)
Vue Element 使用 icon 图标 (第三方) element-ui 自带的图标库还是不够全, 还是需要需要引入第三方 icon, 自己在用的时候一直有些问题, 参考了些教程, 详细地记录补 ...
- 2006-2007 ACM-ICPC | POJ3380 POJ3384 POJ3385 水题题解
// CF比赛链接:http://codeforces.com/gym/101650 // POJ链接:http://poj.org/searchproblem?field=source&ke ...
- PHP面向对象魔术方法之__get 和 __set函数
l 基本的介绍 (1) 当我们去使用不可以访问的属性时,系统就会调用__get方法. (2) 不可以访问的属性指的是(1 . 该属性不存在 2. 直接访问了protected或者private属性) ...
- Spring注解驱动(上)
记录常用的spring注解 1.@Configuration 和 @Bean spring中可以使用xml 的方式进行配置, 也可以使用 @ Configuration 来指定一个类为配置类, 并使用 ...