此方法检测ctrl + v事件,但我无法找到如何获取它的值?
提前致谢,
$(".numeric").keydown(function (event) {
if (event.shiftKey) {
event.preventDefault();
}
switch (event.keyCode) {
case 86:
if (event.ctrlKey) { // detects ctrl + v
var value = $(this).val();
alert(value); // returns ""
}
break;
}
答案 0 :(得分:8)
所有你需要做的就是挂钩粘贴事件,让它通过打破callstack然后读取值来完成。
它可能看起来很丑,但它非常友好,并且可以节省你创建大量糟糕的代码,只是为了阅读实际的剪贴板。
$(".numeric").bind('paste', function (event) {
var $this = $(this); //save reference to element for use laster
setTimeout(function(){ //break the callstack to let the event finish
alert($this.val()); //read the value of the input field
},0);
});
在此处查看此行动:http://jsfiddle.net/Yqrtb/2/
更新
由于我最近不得不做类似的事情,我想我会分享我的最终实现,它是这样的:
$('textarea').on('paste',function(e) {
//store references for lateer use
var domTextarea = this,
txt = domTextarea.value,
startPos = domTextarea.selectionStart,
endPos = domTextarea.selectionEnd,
scrollTop = domTextarea.scrollTop;
//clear textarea temporarily (user wont notice)
domTextarea.value = '';
setTimeout(function () {
//get pasted value
var pastedValue = domTextarea.value;
//do work on pastedValue here, if you need to change/validate it before applying the paste
//recreate textarea as it would be if we hadn't interupted the paste operation
domTextarea.value = txt.substring(0, startPos) + pastedValue + txt.substring(endPos, txt.length);
domTextarea.focus();
domTextarea.selectionStart = domTextarea.selectionEnd = startPos + pastedValue.length;
domTextarea.scrollTop = scrollTop;
//do work on pastedValue here if you simply need to parse its ccontents without modifying it
}, 0);
});
答案 1 :(得分:3)
这非常依赖于浏览器。传递给处理程序的事件中的数据。在safari / chrome中,我们正在监听输入上的paste
事件,然后执行
event.clipboardData.getData('text/plain')
似乎工作正常。您应该使用自己喜欢的调试器并将断点放入粘贴事件处理程序,并查看传入的事件。
答案 2 :(得分:1)
你需要一个黑客。我之前已经在Stack Overflow上详细介绍过几次:
答案 3 :(得分:0)
这很简单,下面的代码工作正常,在我的情况下需要包含在剪贴板上的文字。
function onPaste(info) {
var copied = event.view.clipboardData.getData("Text");
alert(copied);
}
在这种情况下,名为 复制 的变量包含您需要的值。
答案 4 :(得分:-1)
如果您需要一个简单的解决方案,只需要最少的脚本链接粘贴脚本,解决方案就可以查看插入到文本区域中的文本长度。代码非常自我解释。基本上,您查看textarea值的长度并保存最后两个更改值。如果两个值之间的差异大于5个字符,则假定用户粘贴了文本。一般用户通常不会一次按下五个以上的键,从而消除了不必要的假设。
此解决方案仅适用于长度超过5个字符的粘贴文本,通常是URL。
var length1 = 0,
length2 = 0;
$('textarea').keyup(function (e) {
//save last two inserted values
length2 = length1;
length1 = $(this).val().length;
//check the difference and get the substring
if (length1 - length2 > 5) {
alert('Probable Ctrl + V. Pasted text: ' + $(this).val().substring(length1, length2));
}
});