是否可以在不使用setTimeout()函数的情况下获取粘贴文本?

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

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

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

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

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

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

kkthxbai xon1c

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

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

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

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

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

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

我不认为波纹管代码在IE8上有效,因为在执行alert()时输入值不会改变。

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

在Firefox和Chrome上,它运行正常。