Javascript 试图通过传入函数来绑定回调会引发错误

Javascript 试图通过传入函数来绑定回调会引发错误,javascript,jquery,events,backbone.js,jquery-1.7,Javascript,Jquery,Events,Backbone.js,Jquery 1.7,我只想使用jQuery 1.7.2和Backbone.js在输入更改值时触发一个事件 目前我有以下几项(哪些有效) 但当试图这样做时,它抛出了错误 ((jQuery.event.special[handleObj.origType]|{}).handle|| handleObj.handler)。应用不是一个函数 .apply(匹配的.elem,args) () 我不知道该怎么办。你知道为什么这种方法行不通吗?你弄糊涂了: .on(事件[,选择器][,数据],处理程序(事件对象)) .on(事件

我只想使用jQuery 1.7.2和Backbone.js在输入更改值时触发一个事件

目前我有以下几项(哪些有效)

但当试图这样做时,它抛出了错误

((jQuery.event.special[handleObj.origType]|{}).handle|| handleObj.handler)。应用不是一个函数
.apply(匹配的.elem,args)

()

我不知道该怎么办。你知道为什么这种方法行不通吗?

你弄糊涂了:

.on(事件[,选择器][,数据],处理程序(事件对象))
.on(事件映射[,选择器][,数据])

与:

object.on(事件、回调、[context])

主干将上下文作为第三个参数,jQuery则不这样做。看起来jQuery的
on
正在将您的第三个参数解释为
处理程序(eventObject)
并尝试将其作为函数调用,这将解释您看到的错误消息

通常你会这样做:

MyView: Backbone.View.extend({
  events: {
    'change input': 'changeColor'
  },
  initialize: function() {
    this.colorInput = $("<input />", {
       "id": "color",
       "name": "color",
       "value": this.model.get("color")
    });
  },
  render: function() {
    this.$el.append(this.colorInput);
    return this;
  },
  changeColor: function() {
    var color = this.colorInput.val();
    this.model.set("color", color);
  }
});
MyView:Backbone.View.extend({
活动:{
“更改输入”:“更改颜色”
},
初始化:函数(){
this.colorInput=$(“”{
“id”:“颜色”,
“名称”:“颜色”,
“值”:this.model.get(“颜色”)
});
},
render:function(){
this.el.append(this.colorInput);
归还这个;
},
changeColor:function(){
var color=this.colorInput.val();
这个.model.set(“color”,color);
}
});

让我们的活动委派系统来处理事情。

这是为遇到这个问题的谷歌人准备的。我遇到了完全相同的问题,发生的是报告错误的地方和实际发生错误的地方在两个不同的地方

一行代码已经过时,看起来像

$('#modal').on('click', function(e) {
   // Execute invalid code here.
});
另一行代码与此类似:

$('#modal').on('click', function(e) {
   // Execute valid code here.
});
错误是第一次调用不是真函数,因此错误是准确的,被调用的第二个处理程序不是真函数,jQuery无法完成它,但它总是像在第二次函数调用时发生一样


我想说,如果您遇到此错误,请删除可能触发的任何额外事件处理程序,并查看是否可以停止此问题。

+1,是的,这里的意见相同。我还有一个工作示例的问题,onlive创建的DOM元素没有触发
change
事件,我放弃了,因为这不是一个与问题相关的问题。@fguillen:我半解了编辑,我想
。on
正在检查它的第一个参数,以选择它使用的表单,第一个参数不是事件映射,因此它与第一种形式的
.on
一起使用,我们又开始尝试调用视图对象,就像调用函数一样。你是否有“焦点改变前不会触发改变”的问题?@muistooshort,这太完美了。感谢您的解释和代码示例。这种方式更好,效果也更好。我不得不将事件选择更改为
change#color
以使其正常工作,但除此之外,它非常棒。再次感谢。@fguillen:我的事件规范倒过来了,
'input change'
应该(现在是)
'change input'
:@Brandon:我的事件规范倒过来了(duh!),请参阅我对fguillen的最后一条评论。
$('#modal').on('click', function(e) {
   // Execute invalid code here.
});
$('#modal').on('click', function(e) {
   // Execute valid code here.
});