JavaScript“this”引用事件处理程序中的错误对象

时间:2010-01-11 17:00:21

标签: javascript prototypejs

我正在使用Prototype编写一些MVC JavaScript代码。问题是,当我在下面的代码片段中引用this时,它当然会引用Window对象,而我需要它来引用我的Controller实例,以便它可以调用我的updateValue函数,传递HTML元素ID。

我想我必须使用bindbindAsEventListener,但我真的不明白。

var Foo = {
  Controller: Class.create({
    observeEvents: function() {
      $$("#myform input").each(function(input) {
        input.observe("blur", this.updateValue(input.id); // <- wrong this!
      });
    },

    updateValue: function(elementID) {
      ...
    }
  })
}

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

这应该有用。

    observeEvents: function() {
      var Controller = this;
      $$("#myform input").each(function(input) {
        input.observe("blur", Controller.updateValue.bind(Controller, input.id));
      });
     ...

如果你不想学习如何使用bind(坦率地说我不怪你)那么你就可以忘掉它并且只是使用另一个青少年闭合。

    observeEvents: function() {
      var Controller = this;
      $$("#myform input").each(function(input) {
        input.observe("blur", function(event) {
                                Controller.updateValue(input.id);
                              });
      });
     ...