【问题标题】:Trigger a built in event in javascript? [duplicate]在javascript中触发内置事件? [复制]
【发布时间】:2017-02-03 14:06:49
【问题描述】:

我注意到您可以在 Javascript like this 中创建和触发自己的自定义事件和事件侦听器。我可以做类似的事情来人为地触发预先存在的事件吗?

例如,假设我正在加载外部 Javascript,并且我想在事件实际触发后人为触发 DOMContentLoaded

【问题讨论】:

  • @mplungjan 我链接的方法使用创建的事件对象。由于我没有创建事件,我使用的是预先存在的事件,我不确定如何访问该预先存在的事件对象。
  • stackoverflow.com/questions/9153314/… 。所以是的。问题就变成了,你为什么要使用它而不是其他解决方案,因为它有破坏项目中第 3 方代码的风险。

标签: javascript dom-events addeventlistener


【解决方案1】:

// Code goes here
document.addEventListener('DOMContentLoaded', function(event) {
  console.log('DOMContentLoaded triggered');
});
var event = document.createEvent('Event');
// Define that the event
event.initEvent('DOMContentLoaded', true, true);
// target can be any Element or other EventTarget.
document.dispatchEvent(event);

更现代的方法

用于创建事件的"old-fashioned way"(如上所示)已被弃用。现在最好改用Event 构造函数,正如here 所建议的那样。

// Code goes here
document.addEventListener('DOMContentLoaded', (event) => {
  console.log('DOMContentLoaded triggered');
});

const event = new Event('DOMContentLoaded', {
  view: window,
  bubbles: true,
  cancelable: true
});
const cancelled = !document.dispatchEvent(event);
if (cancelled) {
  // A handler called preventDefault.
  console.log('The event was cancelled...');
} else {
  // None of the handlers called preventDefault.
  console.log('The event was not cancelled...');
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 2017-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-16
    • 2014-12-25
    相关资源
    最近更新 更多