如何通过骨干事件处理程序获取触发事件的元素

时间:2011-10-10 15:05:05

标签: jquery backbone.js

我有一个观点。

//define View
var CreatePollView = Backbone.View.extend({
    events: {
        "click #addOption": "addOption",
        "change .dynamicInput": "changeInputs"
    },
    initialize: function () {
        _.bindAll(this, "render", "addOption", "changeInputs");
        this.model.bind('change', this.render);
    },
    changeInputs: function () {
        var newVal = $(this).val(); // this throws exception in jquery script
        this.model.set("Subject", { Subject: newVal });
    }, ....

如何访问触发更改事件的元素(它是一个输入元素)?

2 个答案:

答案 0 :(得分:8)

您收到异常是因为您在_.bindAll上呼叫changeInputs。当你这样做时,你会说changeInputs只要被调用就会绑定到你的对象的上下文中。

换句话说,当您引用$(this)时,您将CreatePollView的实例发送到jQuery,它不喜欢它。

您希望保留此绑定,因为您正在访问模型(this.model),因此this必须是CreatePollView的实例。

相反,您可以从您的函数中获取事件并使用target或其他一些信息:

changeInputs: function(e) { }

答案 1 :(得分:0)

changeInputs: function(e){
   //use e.target
   ...
}