【问题标题】:Event Handler Called With Wrong Context使用错误的上下文调用事件处理程序
【发布时间】:2011-06-10 00:37:28
【问题描述】:

SomeObj 对象中,onkeydown 事件处理程序this.doSomething 在错误的上下文(文本框元素的上下文)中被调用,但它需要在this 的上下文中调用。如何做到这一点?

function SomeObj(elem1, elem2) {
    this.textboxElem = elem1;
    this.someElem = elem2;
    this.registerEvent();
}

SomeObj.prototype = {
    registerEvent: function() {
        this.textboxElem.onkeydown = this.doSomething;
    },
    doSomething: function() {
        // this must not be textboxElem
        alert(this);
        this.someElem.innerHTML = "123";
    }
};

【问题讨论】:

    标签: javascript javascript-events


    【解决方案1】:

    复制对局部变量的引用,以便在闭包中使用它:

    registerEvent: function() {
      var t = this;
      this.textboxElem.onkeydown = function() {
        t.doSomething();
      };
    },
    

    【讨论】:

      猜你喜欢
      • 2017-09-09
      • 2018-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-24
      • 1970-01-01
      相关资源
      最近更新 更多