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

Bar*_*ğlu 3 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;

    }
Run Code Online (Sandbox Code Playgroud)

Mar*_*sen 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); 
});
Run Code Online (Sandbox Code Playgroud)

在这里看到它: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);
});
Run Code Online (Sandbox Code Playgroud)