Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 如何通过主干事件处理程序获取触发事件的元素_Jquery_Backbone.js - Fatal编程技术网

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}
相同。显然,在大多数情况下,您应该更喜欢前者。