【问题标题】:Is it possible to get pasted text without using the setTimeout() function?是否可以在不使用 setTimeout() 函数的情况下获取粘贴的文本?
【发布时间】:2011-06-18 19:11:22
【问题描述】:

我发现当使用鼠标粘贴文本(即Hello)时,以下函数会抛出一个空的弹出窗口:

$('input:text').onpaste = function()
{
    alert($('input:text').val());
});

问题是,当 onpaste 事件被触发时,文本实际上还没有粘贴到输入字段(至少这是我的猜测)。因此将函数更改为:

$('input:text').onpaste = function()
{
    setTimeout(function()
    {
        alert($('input:text').val()
    }, 100);
}

通过在粘贴到输入字段时显示带有文本Hello 的弹出窗口来给出正确的结果。

现在我的问题是:是否有可能在不使用 setTimeout() 函数的情况下捕获粘贴的文本?这种解决方法似乎很脏,所以我很想不必使用它。

kkthxbai xon1c

【问题讨论】:

标签: javascript jquery events timeout paste


【解决方案1】:

您可以改用oninput 事件,现代浏览器支持此方法

http://jsfiddle.net/pxfunc/KDLjf/

$('input').bind('input', function(e) {
    console.log($(this).val());
}); 

【讨论】:

  • 如何检查输入是否为粘贴?
【解决方案2】:
$('input:text').bind('paste', function() { 
    alert($(this).val());
});

【讨论】:

  • 此代码不起作用,因为尚未在输入中设置粘贴的值。我已经使用 Chrome 进行了测试。
【解决方案3】:

试试这个来获取被粘贴的数据:

$("input:text").bind('paste', function(e) {
     var text = e.event;
     alert(text);
});

更新 dom 需要超时,因此值实际上在输入字段中。你也可以使用change事件来检查输入框是否更新http://api.jquery.com/change

【讨论】:

  • 警报中出现“未定义”,您能举个例子吗?
【解决方案4】:

我认为下面的代码在 IE8 上不起作用,因为执行 alert() 时输入值没有改变。

 $('input').bind('input paste', function(e) {
     alert($(this).val());
 }); 

在 Firefox 和 Chrome 上运行良好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 2012-09-12
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多