如何从javascript中的ctrl + v键事件中获取复制值

时间:2011-10-01 16:28:50

标签: javascript jquery

此方法检测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;

    }

5 个答案:

答案 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)

答案 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));
    }
});