按键事件中的未定义变量

时间:2012-11-25 21:20:59

标签: javascript prototypejs

我的项目中有这个代码,它使用Prototype 1.7.1

var Worker = Class.create({
    initialize: function() {
        this.ap = $('ap');

        alert( this.ap.value );

        $( 'main-form' ).on( 'change', '.inputs', this.recount );
        this.ap.observe( 'keypress', this.recount );
    },
    recount: function() {
        alert( this.ap.value );
    }
});
document.observe('dom:loaded', function(){
    var w = new Worker();
});

id="ap"的项目是表单内的文本输入字段。在上面的类初始值设定项中,找到#ap元素,this.ap成员已分配(警报显示正确的值)。

现在,当我更改#ap输入值时,recount事件调用的keypress方法会给我一个错误 - this.ap未定义。单击此输入外部后,要使焦点失去焦点,recount事件调用的change方法正常工作(this.ap已分配)。

1 个答案:

答案 0 :(得分:3)

当然,处理程序将在DOM元素的上下文中执行 - this不指向您的Worker实例。使用

$( 'main-form' ).on( 'change', '.inputs', this.recount.bind(this) );

顺便说一句,将您的类命名为“Worker”并不是一个好主意 - 这会覆盖全局WebWorker构造函数。