2010-01-13 58 views
8

我有一个文本字段,我绑定了使用JQuery的paste事件。当我第一次将东西粘贴到表单域并记录它时,它返回一个空白字符串。同样,如果我再次粘贴到该字段中,则会在粘贴之前返回以前的值。基本上我有一个竞争条件或排序问题,缺乏一个更好的术语。看来表单字段在粘贴事件完成之前不会更新。如何在粘贴事件过程中获取字段的值?

是否有任何方法检查之后的字段的值,粘贴事件已完成且字段实际已填充?我想要的实际字段值,而不是剪贴板数据,因为我知道这是一个只有IE的功能。

$('#url').bind('paste', function(e) { 
    alert($(this).val()); 
}); 
+0

您不能使用更改事件而不是粘贴? – kender 2010-01-13 08:31:44

+0

@kender - 只有当OP想要等待用户将焦点从输入移开时。 – 2010-01-13 09:37:11

+2

重要的一点是:从第5版开始,'paste'事件已经存在于IE中,但只是相对最近才将其应用到其他浏览器中。例如,Firefox 2没有它。 – 2010-01-13 09:39:05

回答

16

原来体面的解决方案是包裹回调在setTimeout(),用0毫秒的延迟,以使它异步的。

我的新代码是:

var urlField = $('#url'); 
urlField.bind('paste', function(e) { 
    setTimeout(function() { 
     alert(urlField.val()); 
    }, 0); // note the 0 milliseconds 
}); 

感谢DigitalBush's Masked Input Plugin,它使用了这种技术在整个源。

+0

我想提一下,这对任何依靠获得该领域价值的潜在操作都有效。 – Soviut 2012-11-25 11:08:06