2012-03-13 83 views
5
events: { "paste .youtube-url" : "addUrl" } 

addUrl: function(){ 
    console.log(this.$(".youtube-url").val()); 

因此,可以說我貼上「壞」到文本框中第一次貼事件,都會激發

控制檯輸出:(空字符串)

那麼,如果我粘貼追加類似 「編碼器」

控制檯輸出:壞

代替什麼是盒子裏面的「badcoder」,我想這是因爲在插入文本之前觸發了僞粘貼事件。

回答

8

代替使用paste事件,您可以使用keyup事件,該事件在有人粘貼時觸發,但只有在輸入值更新後才觸發。

UPDATE從@Micah(和@JohnnyO)

好評。這裏有一個修復我發現工作:

$('input').on('paste', function() { 
    var that = this; 
    setTimeout(function() { 
     alert(that.value); 
    }, 0); 
});​ 

此設置超時,使讀取輸入的值的代碼的代碼在堆棧中的其餘部分已經運行後才能運行。我只在Chrome 21中進行了測試,但零時間超時似乎有訣竅。

演示:http://jsfiddle.net/H4K4R/

+1

注意:由於#JohnnyO提到如果上下文菜單用於粘貼,'keyup'事件不會觸發。 – Micah 2012-08-20 21:43:17

+0

@Micah好的。我**用另一種方法更新了我的答案。 – Jasper 2012-08-20 22:54:26

+0

'事件:{「change.youtube-url」:「addUrl」}'可能是另一種選擇,但事件在焦點離開文本框之前不會觸發。 – Micah 2012-08-21 17:25:07

4

通過@Jasper答案只能通過鍵盤的工作原理時,粘貼。當使用鼠標和上下文菜單進行粘貼時,您將無法獲取關鍵事件。最值得關注的事件是'輸入'事件。不幸的是,對於9之前的IE版本,您需要注意「propertychange」事件,因爲它們不支持「輸入」。 'propertychange'不會冒泡,所以你不能像使用Backbone那樣連接這個事件,而是需要直接綁定到'.youtube-url'元素。