2013-05-12 81 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); 
}