【问题标题】:Modal cannot be closed, Firefox says ReferenceError: event is not definedModal 无法关闭,Firefox 说 ReferenceError: event is not defined
【发布时间】:2019-02-25 12:24:04
【问题描述】:

这段代码适用于所有浏览器但不适用于 Firefox 有什么问题?当一个模态被触发时,它就不能再被关闭了。它说“ReferenceError:未定义事件”。看这里:Plunker snippet

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

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

【问题讨论】:

  • 来吧,你在哪里看到event定义的?该错误准确地告诉您:您正在使用event,但它没有在任何地方定义。
  • js noob 在这里,对不起...如果您觉得这不是浪费时间,请您详细说明一下。谢谢....为什么它适用于除 Firefox 之外的所有用户
  • @0xc14m1z 为什么这么粗鲁? event 在其他浏览器中是全局的 @jennab 参见 this answer
  • 对不起,我不是故意的。

标签: javascript firefox modal-dialog popup referenceerror


【解决方案1】:

我看了你的 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 分配。

希望清楚。

【讨论】:

  • 世界级!!非常感谢您的透彻见解和您的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-03
  • 2015-02-26
  • 2018-12-26
  • 2020-06-14
  • 2019-02-08
  • 2015-11-19
  • 2019-11-10
相关资源
最近更新 更多