将粘贴事件挂钩到隐藏的textarea

时间:2010-02-09 19:57:27

标签: javascript textarea hook paste

我想挂钩<input type="text">的粘贴事件并强制将此文本粘贴到隐藏的textarea中(然后我想解析textarea的文本并执行'从excel粘贴数据到gridview'操作)。类似的东西:

$('#input1').bind('paste', function(e) {
    // code do paste text to textarea instead of originally targeted input
});

我应该编写哪些跨浏览器代码而不是评论?

感谢。

2 个答案:

答案 0 :(得分:3)

当Ctrl和V键或Shift和Insert键关闭时,有一个hacky解决方案会在textarea上触发focus事件。 [是的,它不适用于contextmenu - &gt;过去]

$(document).ready(function(){
    var activeOnPaste = null;
    $('#input1').keydown(function(e){
        var code = e.which || e.keyCode;
        if((e.ctrlKey && code == 86) || (e.shiftKey && code == 45)){
            activeOnPaste = $(this);
            $('#textarea').val('').focus();
        }
    });
    $('#textarea').keyup(function(){
        if(activeOnPaste != null){
            $(activeOnPaste).focus();
            activeOnPaste = null;
        }
    });
});

当Ctrl和V键关闭时,代码会使指针聚焦在textarea上。在那一刻没有粘贴任何文本,它在此keydown函数被触发后被粘贴,因此粘贴的文本显示在textarea中。在那之后,在该textarea的密钥上,#input1将成为焦点。

键入此内容时,我发现使用范围可能有键盘粘贴和鼠标粘贴的解决方案。我也会尝试一下......

答案 1 :(得分:0)

您应该将函数绑定到输入字段onChange()事件,并在每次调用此函数时复制其内容,然后处理数据。如果你对“粘贴”的内容特别感兴趣(我不知道你在那里做什么,但一般来说,这是一个坏概念的标志,在粘贴内容必须另外处理的情况下)你可以尝试实现一个检查输入速度的计数器(例如,每秒超过xx个字符 - &gt; PASTE-Eventcall)