如何使用Backbone处理输入文本“粘贴”事件

时间:2013-05-12 20:02:39

标签: events backbone.js

如果用户在输入文本元素中写入或粘贴字符串,我正尝试通过Backbone将数据发送到服务器。

在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);
}

3 个答案:

答案 0 :(得分:6)

如果您切换为使用keyup事件而不是keypresspaste,则可以通过键盘(⌘ + vCtrl + v)进行粘贴并正常打字。

如果您使用input事件,即使您右键单击并粘贴(除了与keyup相同的预期行为外),它也会有效。

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

答案 1 :(得分:1)

使用keyup和mouseleave(而不是输入)事件处理程序,以便它也可以在IE中工作

另见How to detect right mouse click + paste using JavaScript?

model.exports = {
    'parse': function(req, res) {

        var week = [0,0,0,0,0,0,0];

        for (var day = 0; day < 7; day++){
            Elements.count({ date : {'>=' : start_date + day, '<' : end_date + day }}).exec(function countCB(error, count) {
                week[day] = count;                      
            });
        };

        res.view('static/emissions', {  data : week });
    };
};

答案 2 :(得分:0)

看看

<强> e.originalEvent

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