从内部调用函数on()

时间:2017-07-19 07:14:49

标签: jquery

我需要从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()内部调用函数?

2 个答案:

答案 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
    });
  }
};