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

Tom*_*Tom 7 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 });
    }, ....
Run Code Online (Sandbox Code Playgroud)

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

Bri*_*sio 8

因为你在呼唤你得到一个异常_.bindAllchangeInputs.当你这样做时,你会说changeInputs只要它被调用就会绑定到你的对象的上下文.

换句话说,当你提到$(this)你正在发送一个CreatePollView它不喜欢的jQuery 实例.

但是,您希望保留此绑定,因为您正在访问模型(this.model),因此this需要成为其实例CreatePollView.

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

changeInputs: function(e) { }
Run Code Online (Sandbox Code Playgroud)

  • 在你的`changeInputs`方法中,你可以通过调用`$(e.currentTarget)`或`$(e.target)`来获得改变的特定元素,就像Brian建议的那样,这取决于你的需要.`e`是一个jquery事件args对象,所以请阅读jquery的文档来理解diff. (2认同)