2010-01-13 59 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