Jquery 如何通过主干事件处理程序获取触发事件的元素
我有一个观点Jquery 如何通过主干事件处理程序获取触发事件的元素,jquery,backbone.js,Jquery,Backbone.js,我有一个观点 //define View var CreatePollView = Backbone.View.extend({ events: { "click #addOption": "addOption", "change .dynamicInput": "changeInputs" }, initialize: function () { _.bindAll(this, "render", "addOption",
//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 });
}, ....
我如何访问触发更改事件的元素(它是一个输入元素)?您将收到一个异常,因为您正在
changeInputs
上调用.bindAll
。当您这样做时,您的意思是无论何时调用对象,changeInputs
都将绑定到对象的上下文
changeInputs: function(e){
//use e.target
...
}
换句话说,当您引用$(this)
时,您正在将CreatePollView
的实例发送到jQuery中,而jQuery不喜欢这样
但是,您希望保留此绑定,因为您正在访问您的模型(this.model
),因此this
需要是CreatePollView
的实例
相反,您可以从函数中获取事件并使用目标
或其他一些信息:
changeInputs: function(e) { }
+1关于ucode.bindAll的补充说明真的很有趣,我有时仍在为这些绑定而挣扎:)在
changeInputs
方法中,您可以根据需要调用$(e.currentTarget)
或$(e.target)
来获取已更改的特定元素e
是一个jquery事件args对象,因此请阅读jquery的文档以了解区别。谢谢各位@Sander。很好的解释。这似乎是一个正确的方法。与此同时,我设法让它工作起来,但我并不真正理解arguments集合从何而来……请参阅下面的代码changeInputs:function(){var newVal=arguments[0].srcElement.value;this.model.set(“Subject”,{Subject:newVal};},@Tom:arguments
是传入的参数数组,不管您在函数def中定义了什么。因此,function(e){e.srcielement}
与function(){arguments[0].srcielement}
相同。显然,在大多数情况下,您应该更喜欢前者。