Modal cannot be closed, Firefox says ReferenceError: event is not defined

Modal cannot be closed, Firefox says ReferenceError: event is not defined

这段代码有什么问题,它适用于所有浏览器但不适用于 Firefox?当一个模式被触发时,它不能再被关闭。它说 "ReferenceError: event is not defined"。看这里:Plunker snippet

错误发生的相关行(261)是这样的:

function dismissModal() {
  bindEvents(_dismiss, function(that) {
  hideModal(event);
  });
 }

我看了你的 Plunker。

错误不言自明:事件在定义之前就被使用了,这就是为什么你会得到 ReferenceError,因为范围管理器正在变得疯狂。

您的 dismissModal 方法调用 bindEvents 传递两个参数,第二个似乎是回调。

通过查看您的 Plunker 中 bindEvents 的定义可以确认这一点,即:

function bindEvents(el, callback) {
  for (i = 0; i < el.length; i++) {
    if (window.CP.shouldStopExecution(0)) break;
    (function(i) {
      el[i].addEventListener('click', function(event) {
        callback(this, event);
      });
    })(i);
  }
  window.CP.exitedLoop(0);
}

如你所见,第二个参数是一个callback。 单击某个元素时会调用 callback,这里会使用两个参数调用它:

callback(this, event);

回到你的代码,然后,我们可以看到事件应该是你回调的第二个参数:

function dismissModal() {
  bindEvents(_dismiss, function(that, event) {
    hideModal(event);
  });
}

这样,它被定义(作为回调参数)并在单击元素时由 bindEvents 分配。

希望清楚。