我需要在事件处理程序中访问事件上下文和对象上下文



我有这段代码:

function ActivityDialog(_divId, _title) {
    function addButton() {
      var buttonElement = document.createElement('input');
      buttonElement.setAttribute('type','button');
      buttonElement.setAttribute('class','button');
      buttonElement.setAttribute('id','updateButton-' + id););
      buttonElement.onclick = this.updateAction;
    };
    function updateAction() {
      var buttonId = this.id; // correct: this is the Button
      this.sendUpdateRequest(stringUrl); // not defined: Need to reference the current ActivityDialog!!!    
    };
    function sendUpdateRequest(url) {
      // something...
    };
}

正如你所看到的问题是,当我调用函数sendUpdateRequest;我怎么能,在同一时间,检索按钮信息和调用一个函数?

你可以试试这个…

function ActivityDialog(_divId, _title) {
    // Store the ActivityDialog context
    var self = this;
    function addButton() {
      var buttonElement = document.createElement('input');
      buttonElement.setAttribute('type','button');
      buttonElement.setAttribute('class','button');
      buttonElement.setAttribute('id','updateButton-' + id););
      buttonElement.onclick = this.updateAction;
    };
    function updateAction() {
      var buttonId = this.id;
      self.sendUpdateRequest(stringUrl); // <--------------------- 
    };
    function sendUpdateRequest(url) {
      // something...
    };
}

因为您使用updateAction作为事件处理程序,您正确地看到this将是生成事件的按钮。存储ActivityDialog的初始上下文将允许您甚至在事件处理程序中维护对它的访问。

相关内容

最新更新