javascript - 如何在 js 中对嵌套的事件监听器进行排序
问题描述
我的 js 中有以下代码:
const someElement = document.getElementById('some-element')
someElement.addEventListener('click', function(){
console.log('The start of main event')
const someOtherElement = document.getElementById('some-other-element')
someOtherElement.addEventListener('load', function () {
console.log("someOtherElement is invoked")
})
console.log("This is the end of main event")
})
如何使这段代码完全按照实际编写的代码的顺序运行。我想要以下结果:
主赛事开始
调用 someOtherElement
主赛事到此结束
但是,当代码运行时,我得到以下结果:
主赛事开始
主赛事到此结束
调用 someOtherElement
解决方案
load 事件只会被调用一次(在你的元素加载之后)。例如,如果你有一张图片,你已经为其放置了一个加载事件,加载事件只会在元素加载后触发一次。因此,如果您在已经加载some-element
后 单击,则不会触发 load 事件。some-other-element
此外,如果单击some-other-element
之后加载some-element
,它将在和someOtherElement invoked
之后记录。The start of main event
This is the end of main event
请记住:
您只能在<body>
、<frame>
、<iframe>
、<img>
、<input type="image">
、<link>
、<script>
、 和<style>
标签上添加加载事件。
编辑:正如@epascarello 在评论中所说,如果您多次单击,some-element
它将向. 要解决此问题,您可以使用一个变量:some-other-element
const someElement = document.getElementById("some-element");
let eventBinded = false;
someElement.addEventListener("click", function () {
console.log("The start of main event");
const someOtherElement = document.getElementById("some-other-element");
if (!eventBinded) {
eventBinded = true;
someOtherElement.addEventListener("load", function () {
console.log("someOtherElement is invoked");
});
} else {
console.log("Event already binded");
}
console.log("This is the end of main event");
});
推荐阅读
- spring-boot - 带有 JoinColumn 的复合键 (EmbeddedId),选择
- c++ - 在 Windows Visual Studio 问题上安装 CMake 包(find_package)
- ios - 收入猫(SwiftUI)“收据无效”的购买问题
- wpf - 在另一个中包含一个 ResourceDictionary
- javascript - 即使填充了值,req 也没有定义
- python - Confirm_password 验证错误不起作用
- python - 从json获取正确信息的python问题
- blazor-webassembly - Blazor WASM 登录是否适用于 FIDO2 以及如何使用?
- react-native-popup-menu - 如何在点击时隐藏灰色背景颜色(react-native-popup-menu)
- azure-log-analytics - 使用 Kusto Query 在 ADF v2 中为长时间运行的管道设置警报