2013-05-12 82 views
4

如果用戶在輸入文本元素中寫入或粘貼字符串,我試圖通過Backbone將數據發送到服務器。如何處理帶骨幹的輸入文本「粘貼」事件

的骨幹事件

我覺得這樣的事情,但它不工作:

events:{ 
    "click .close":"closeResults", 
    "keypress input":"fetchData", 
    "paste input":"fetchData" 
}, 
fetchData:function (e) { 
    var $this = this; 
    window.setTimeout(function() { 
     if ($.trim(e.target.value).length >= 3) { 
      console.log(e.target.value); 
      $this.collection.fetch({data: {limit: 10, term:$.trim(e.target.value)}}); 
     } 
    }, 0); 
} 
+0

'input'位於'$ el'裏面嗎?因爲這是工作示例 – 2013-05-12 20:27:36

+0

btw'$ this'不是一個合適的變量名,因爲它暗示它是一個jQuery對象。 'self'是一個更好的選擇。無論如何,你的代碼應該工作我不能看到沒有什麼不對 – 2013-05-12 22:10:43

+0

與此代碼'按鍵'事件的作品,但'粘貼'沒有,我也嘗試了不同的'$ this'這個名字,這是一個局部變量,這應該這個地方不會造成問題。 – vitto 2013-05-12 22:45:05

回答

6

如果您切換到使用keyup事件,而不是keypresspaste,它會粘貼通過鍵盤工作( ⌘ + vCtrl + v)並正常打字。

如果使用input事件,即使您右鍵單擊並粘貼(除了與keyup相同的預期行爲以外),它也會起作用。

input

更多信息: https://developer.mozilla.org/en-US/docs/Web/API/window.oninput

0

看一看

e.originalEvent

_paste_plain_text : function (e) { 
    e.preventDefault(); 
    var text = e.originalEvent.clipboardData.getData("text/plain"); 
    document.execCommand("insertHTML", false, text); 
}