我需要从on()
处理程序调用一个函数。在我的示例代码中,我必须调用func1()
。我使用on()
,因为#myid
在文档加载时不存在。这是代码:
func1: function (e, data) {
console.log('func1');
this.func3();
},
func2: function (e, data) {
$('#myid').on('click', function () {
this.func1();
});
}
},
此代码不起作用。错误是:
未捕获的TypeError:this.func1()不是函数
如何从on()
内部调用函数?
答案 0 :(得分:5)
未捕获的TypeError:this.func1()不是函数
您将遇到此错误,因为this
的上下文不同。它指向jQuery的元素#myid
的上下文,而不是原始的。要摆脱它,试试这个:
// ... Code removed for brevity
func2: function (e, data) {
var self = this;
$('#myid').on('click', function () {
self.func1();
});
}
// ... Code removed for brevity
答案 1 :(得分:2)
假设这些是对象的属性,您的问题是因为单击处理程序中的this
将引用#myId
元素,而不是父对象。要解决此问题,您需要在变量中缓存this
引用。
另请注意,您声明自己使用的是on()
,因为#myId
元素在页面加载时不存在。如果是这种情况,您需要使用on()
方法的委派签名,而您当前没有这样做。试试这个:
var obj = {
func1: function (e, data) {
console.log('func1');
this.func3();
},
func2: function (e, data) {
var _this = this; // note this variable...
$(document).on('click', '#myid', function() {
_this.func1(); // ...and it's use here
});
}
};