我的项目中有这个代码,它使用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
已分配)。
答案 0 :(得分:3)
当然,处理程序将在DOM元素的上下文中执行 - this
不指向您的Worker
实例。使用
$( 'main-form' ).on( 'change', '.inputs', this.recount.bind(this) );
顺便说一句,将您的类命名为“Worker”并不是一个好主意 - 这会覆盖全局WebWorker构造函数。