typescript - DOMContentLoaded 没有在打字稿中被解雇
问题描述
页面加载完成后,我试图在打字稿中触发 DOMContentLoaded 事件。
我无法弄清楚在哪里放置addEventListener('DOMContentLoaded', event ()=>{})
行,以便我可以查询到目前为止加载的元素我将此代码放在我的 Web 组件类的构造函数中,但它没有触发。
下面是代码。
constructor() {
super();
document.addEventListener('DOMContentLoaded', (e) => {
this.domCompleteHandler(e)
}, false);
}
domCompleteHandler(e: Event) {
//if (e.target!.readystatechange === "complete") {
var chkbxes = document!.querySelector('my-app[apptitle="my app"]')!.shadowRoot!.querySelector('[active]')!.shadowRoot!.querySelector("#permSection")!.querySelector("#permtable")!.shadowRoot!.querySelector("#permtable")!.querySelectorAll(".permchk");
chkbxes!.forEach(el => {
el.addEventListener('click', (e) => {
this.clickHandler(e);
});
});
console.log(e);
console.log(chkbxes);
//}
}
解决方案
这里最有可能的情况是该事件在此代码运行之前已经触发。
您可以通过在应用程序中较早的位置放置一个事件侦听器来测试这一点。一个示例是直接在 HTML 页面顶部附近添加以下脚本:
<script>
document.addEventListener('DOMContentLoaded', () => {
console.log('DOMContentLoaded fired');
});
</script>
这应该在事件触发时在您的日志中显示日志消息,这可能是在上面代码示例中显示的对象被实例化之前。
通常,当主文档已加载并被解析时会触发此事件,但不会触发子资源。这意味着如果您的代码行与文档加载异步运行(例如,如果它等待 afetch
或setTimeout
,或者如果<script>
标记被标记为async
),那么事件很可能会首先触发。
还有另一种选择:事件可能根本不会触发,因为 DOM 内容实际上还没有加载。这不太可能,但您可以通过检查document.readyState
全局来确认文档状态。如果设置为,interactive
或者complete
事件已经触发。
推荐阅读
- python - 为什么在 Stack 类中将链表应用到我的 pop 函数时会出现这种类型的错误
- open-policy-agent - Rego 规则中的参数 [Open Policy Agent]
- unix - YML 配置文件中的 IP 地址模式匹配和替换
- css - 根据屏幕宽度在表格内换行
- python-3.x - 不断收到 werkzeug.routing.BuildError
- vhdl - 模拟失败:事务不在升序 GHDL 中
- python - 当值在 Python 3.7 中可调用时,从枚举中获取所有值
- reactjs - 将反应应用程序部署到heroku,给出H10错误代码
- synchronization - 从 WinSCP 命令行开始同步时排除一个文件扩展名
- c# - 是否可以在选择完成之前设置列别名,使用 Linq to SQL