我已经从输入中绑定了粘贴事件:
$(document).ready(function(){
$('.myInput').bind("paste",function(e) {
console.log(e);
});
});
每次我点击CTRL-V,它都会返回e
事件对象。
我想获取用户即将粘贴在输入中的数据。
通过检查事件对象,我在以下几个地方找到了值:
e.srcElement.value
e.target.value
但是那些在粘贴发生后返回输入中的值。所以如果我在输入另一个字符串后粘贴一些文本,我会将两个字符串连接起来。
我搜索互联网,发现丑陋的闪存解决方案。
在jquery中有一个干净的方法吗?
我想在获取输入值e.srcElement.value
之后用before
获取整个文本,然后比较两个字符串并消除第一部分,通过连续性返回剪贴板的值。
答案 0 :(得分:6)
也许这就是你想要做的事情,而不是100%肯定:
HTML:
<input type="text" id="test" class="myInput" value="This is some default text" />
jQuery的:
$(document).ready(function () {
$('input').on('paste', function (e) { //Attach paste event handler for all inputs
$(this).val('').val(e.target.value); //Clear the current value, then insert the value of the data that was pasted
});
});
答案 1 :(得分:2)
clipboardData适用于现代浏览器(IE11 +,Firefox,Chrome ...)。
$(document).ready(function(){
$('.myInput').on('paste', function (e) {
var dt = e.originalEvent.clipboardData;
if(dt && dt.items && dt.items[0]){
dt.items[0].getAsString(function(text){
console.log(text); //the pasted content
});
}else if(dt && 'getData' in dt){
console.log(dt.getData('text')); //the pasted content
}
});
});
http://jsfiddle.net/6n10y0ds/9/
https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer
答案 2 :(得分:-1)
您可以使用onbeforepaste事件来执行此操作。
$(function(){
$('#el').on('beforepaste',function(e){
[...]
});
});