Javascript 试图通过传入函数来绑定回调会引发错误
我只想使用jQuery 1.7.2和Backbone.js在输入更改值时触发一个事件 目前我有以下几项(哪些有效) 但当试图这样做时,它抛出了错误 ((jQuery.event.special[handleObj.origType]|{}).handle|| handleObj.handler)。应用不是一个函数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(事件
.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.
});