javascript - 使用错误的上下文调用事件处理程序

标签 javascript dom-events

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";
    }
};

最佳答案

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

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

关于javascript - 使用错误的上下文调用事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6300817/

相关文章:

javascript - "Google is not defined"错误 - 尝试创建信息窗口谷歌地图

javascript - 如果 token 过期则注销

javascript - 从 Firefox 扩展检测选项卡关闭(关闭后)

javascript - 初学者的简单 Javascript 循环查询

javascript - 通过指定坐标检索 html 控件

javascript - HTC One X KeyCode 始终返回零

javascript - 一起使用react-autolink+react-emoji(给我错误r.split)

javascript - url 编码组件未进入字符串服务器端

javascript - Javascript播放YouTube API(+排队视频)

javascript - 如何在Javascript dragenter事件期间判断拖动的内容是文本还是文件