如何从Javascript中的事件访问类变量?

时间:2010-10-19 20:39:15

标签: javascript scope this

我正在使用原型javascript库。我的代码如下。我创建了一个类,在该类中,我为其中一个类方法创建了一个事件监听器。在该方法中,我需要访问触发事件的表单元素的属性和类属性。目前,代码在事件中理解$(this).getValue(),因为它被分配给触发事件的表单元素。如何从事件函数访问this.makingRequest和this.user属性?我能以某种方式将它们作为参数传递给我吗?如果是这样,怎么样?我没有尝试过这一点。谢谢你的帮助。

function AddressBookEntryObj(user, selectField)
{
    this.selectField = selectField;
    this.user = user;
    this.makingRequest = false;
    this.debugMode = false;

    Event.observe(this.selectField, 'change', handleEvent);
}

//Prototype statements
AddressBookEntryObj.prototype.handleEvent = handleEvent;
//End prototype statements

function handleEvent()
{
    try
    {
        if (!this.makingRequest) 
        {
            this.makingRequest = true;    
            var ajax = 
                new Ajax.Request(
                    '/servlet/MyReallyCoolServlet',
                    {
                        method:     'get', 
                        parameters:    { 
                            action:         'doGet', 
                             whichFunc:         'MyReallyCoolFunction',
                             fieldValue:     $(this).getValue(),
                             user:            this.user
                         }, 
                        onCreate:    handleAjaxCreate,
                        onComplete: handleChangeComplete 
                    }
                );
            return true;
        } 
        else 
        {
            return false;
        }
    }
    catch (ex)
    {
        alert("handleEvent Error: \r\n" + ex.toString());
    }
}

谢谢!

安德鲁

2 个答案:

答案 0 :(得分:0)

首先使用:

AddressBookEntryObj.prototype.handleEvent = function()
{
}

然后handleEvent中的this应该指向AddressBookEntryObj。为了确保它在该函数内的任何地方都可以使用,例如:

var _this = this;

然后在任何事件处理程序中使用_this

答案 1 :(得分:0)

jsfiddle example

看看我用你的代码制作的这个jsfiddle。您需要将“bind(this)”添加到回调处理程序中。这样做会使“this”成为你的对象并使用“e.target”来访问html元素。

_Michael