2011-06-24 47 views
0

我试图做到这一点:FOO的jquery事件不适用于对象?

var foo = new Foo(); 
foo.setEvents(foo); 

代码:

function Foo() 
{ 
    this.id = getId(); //this works successfully, each instance of foo gets 
          //assigned a new auto incrementing id e.g 1, 2, 3, etc 

    this.setEvents = function(that) 
    { 
     $("#myButton").click(that.bar); 
    } 

    this.bar = function() 
    { 
     alert(this.id); 
    } 
} 

每当我运行此代码,然后点击我的按钮,我得到一个警告说“未定义”

如何在触发事件时保留其要运行的方法的对象的状态?

+6

你的手柄和头像让我想downvote这个问题。 –

+1

[它适用于我](http://jsfiddle.net/alexdickson/DAPYt/)。 – alex

+2

@alex他期待得到对象的id而不是按钮。 –

回答

1

这指的是东西在jQuerys范围不同...

function Foo() 
{ 
    obj=this; 
    this.id = 1; //this works successfully, each instance of foo gets 
          //assigned a new auto incrementing id e.g 1, 2, 3, etc 

    this.setEvents = function(that) 
    { 
     $("#myButton").click(that.bar); 
    } 

    this.bar = function() 
    { 
     console.log(obj) 
    } 
} 
var foo = new Foo(); 
foo.setEvents(foo); 
1

当该函数被调用,this指向处理该事件的原生DOM元素。

您需要对该对象本身的引用,该引用可以在该函数的范围内解析。

这样做的一种常见方法是使用var that = this

jsFiddle

相关问题