Javascript 用户更改输入值时触发函数(backbone.js)

Javascript 用户更改输入值时触发函数(backbone.js),javascript,jquery,backbone.js,Javascript,Jquery,Backbone.js,我刚开始使用backbone.js,目前正在制作一个页面,其中有一个div#listing_filter,包含文本输入元素,还有一个表,显示从RESTful后端(PHP/Codeigniter)获取的一些列表。文本输入中的值将充当过滤器,以缩小服务器检索的结果范围 问题:每当任何文本框中的值发生更改时,我希望浏览器根据筛选值获得另一组结果。下面是我的尝试,其中即使文本输入值已更改,updateFilter函数也不会启动。你知道哪里出了问题吗 另一个问题是,我应该将#listing_filter的

我刚开始使用backbone.js,目前正在制作一个页面,其中有一个div
#listing_filter
,包含文本输入元素,还有一个表,显示从RESTful后端(PHP/Codeigniter)获取的一些列表。文本输入中的值将充当过滤器,以缩小服务器检索的结果范围

问题:每当任何文本框中的值发生更改时,我希望浏览器根据筛选值获得另一组结果。下面是我的尝试,其中即使文本输入值已更改,
updateFilter
函数也不会启动。你知道哪里出了问题吗

另一个问题是,我应该将
#listing_filter
的内容放入模板中,还是将其硬编码到主体HTML中?谢谢

JS代码

window.ListingFilterView = Backbone.View.extend({
    initialize: function() {
        _.bindAll(this, 'updateFilter');
    },

    events: {
        'change input' : 'updateFilter'
    },

    updateFilter: function() {
        console.log('hey');
    }

});

// Router

var AppRouter = Backbone.Router.extend({
    routes: {
        '': 'listings',
    },

    listings: function() {
       //... some other code here
        this.listingFilterView = new ListingFilterView();
    }
});
<div id="listing_filter">
    Price: <input type="text" id="listing_filter_price" />
    Beds: <input type="text" id="listing_filter_bedroom" />
    Baths: <input type="text" id="listing_filter_bathroom" />
</div>
HTML代码

window.ListingFilterView = Backbone.View.extend({
    initialize: function() {
        _.bindAll(this, 'updateFilter');
    },

    events: {
        'change input' : 'updateFilter'
    },

    updateFilter: function() {
        console.log('hey');
    }

});

// Router

var AppRouter = Backbone.Router.extend({
    routes: {
        '': 'listings',
    },

    listings: function() {
       //... some other code here
        this.listingFilterView = new ListingFilterView();
    }
});
<div id="listing_filter">
    Price: <input type="text" id="listing_filter_price" />
    Beds: <input type="text" id="listing_filter_bedroom" />
    Baths: <input type="text" id="listing_filter_bathroom" />
</div>

价格:
病床:
浴室:

主干视图仅对视图的
el
或其
el
内的元素上的事件作出响应。默认情况下,视图的
el
是公正的,您不会告诉视图使用任何其他内容

您可以告诉视图要使用哪个
el

或者,您可以使用()将视图自身附加到该元素:

或者在定义视图()时设置
el


一旦那不碍事了,您需要了解,
不会触发更改事件,因此您必须等待用户从输入中取出标签,或切换到监听
按键
事件,并使用计时器检测它们何时停止键入。

或更简单的方法:
window.ListingFilterView=Backbone.View.extend({el:'#listing#u filter'/…}
。顺便说一句,您不需要将jQuery对象传递给
el
属性,只需传递一个字符串:
var v=new v({el:'#listing#u filter'})
@user1248256:真的,旧习惯等等。
window.ListingFilterView = Backbone.View.extend({
    el: '#listing_filter',
    //...
});