jQuery - 单击时未定义的函数调用

时间:2014-11-17 16:49:33

标签: javascript jquery

我想在click事件上调用一个函数,我的同事定义了如下所示的函数。不知怎的,我无法访问它,出了什么问题?

function Start(data) {

this.move= function() {
  ....
};

   $('.button').click(function(){

      this.move();
    });

}

4 个答案:

答案 0 :(得分:3)

单击函数中的

this是单击的元素。将对象的引用保存在函数外部的变量中并使用它:

function Start(data) {
    var self = this; //HERE

    this.move= function() {
        ....
    };

    $('.button').click(function(){

        self.move();
    });

}

Here's an article可能会为您提供有关上述修复的更多解释。

答案 1 :(得分:1)

试试这个,你必须记住对你的主要功能的引用。

function Start(data) {
var that = this;
this.move = function() {
  ....
};

   $('.button').click(function(){

      that.move();
    });

}

答案 2 :(得分:1)

保持范围的另一种方法是使用jQuery's proxy()

$('.button').click($.proxy(this.move, this));

答案 3 :(得分:1)

在使用jQuery绑定的事件处理程序中,this引用处理程序绑定的DOM元素。请参阅jQuery Event Basics

您可以使用点击处理程序上的this覆盖jQuery的function#bind绑定:

function Start(data) {
    this.move= function() {
        ....
    };

    $('.button').click(function(){
        this.move();
    }.bind(this));
}

谨防浏览器对function#bind的支持 - 如果您定位旧浏览器,则需要填充或只需将this的值分配给另一个变量。