【发布时间】:2019-07-17 23:21:02
【问题描述】:
我想确保我的 javascript 仅在加载所有内容后才能工作。所以,我把我的代码放在一个加载事件监听器中。如果我在该事件中创建一个函数,并尝试在 onclick 事件中调用它,在一个按钮中,我会收到一个错误,提示我的函数未定义。
错误:未捕获的引用错误:sayHello 未定义 在 HTMLButtonElement.onclick
如果我从加载事件中删除该函数,它就可以工作。为什么会这样?
index.html
<html>
<head>
<script src="/js/index.js"></script>
</head>
<body>
<button onclick="sayHello()">Say Hello</button>
</body>
</html>
index.js
window.addEventListener("load", async () => {
function sayHello(){
alert("Hello!");
}
});
【问题讨论】:
-
要么不要在
load监听器中声明函数,要么在其中绑定click事件监听器。考虑使用DOMContentLoaded而不是load,avoid 使用onclick之类的属性。为什么你的监听器是async函数? -
@SebastianSimon,感谢您的回答!我试过
DOMContentLoaded,但我得到了同样的错误。我的听众是async,因为我将使用一些等待导入。为什么使用onclick是个坏主意? -
解决方案不是
DOMContentLoaded;这是第一句话。像onclick或oninput这样的内联事件处理程序是not recommended。它们是注册事件的obsolete, hard-to-maintain and unintuitive 方式。总是useaddEventListener。 -
感谢您的帮助!
标签: javascript function onclick addeventlistener