3

我的项目中有这段代码,它使用 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已分配)。

4

1 回答 1

3

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

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

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

于 2012-11-25T21:27:38.153 回答