所以我正在做一个项目。我的功能正常,直到我突然点击一个应该运行download()
的按钮,但事实并非如此。所以我打开控制台,看到这个:
TypeError: download is not a function
我很困惑。我从控制台运行download()
,它工作正常。所以我认为这可能是onclick
(我的按钮有onclick="download()"
)的问题,所以我使用JavaScript来添加点击事件。
$("#download").onclick=download()
注意:$()
是一个自定义的jQuery-esque函数,不使用框架本身。在这个问题的同时,它还有许多其他用途。
但这也不起作用。所以我也尝试使用
$("#download").addEventListener("click", download)
这再次无效。两次都说$()
是null
。所以我出去了,尝试使用
document.getElementById("download").onclick=download()
与addEventListener()
相同。但这给了我一个非常令人惊讶的错误信息:
TypeError: document.getElementById(...) is null
我在控制台中重复了所有表达式,发现它们不是null。我没有点击按钮,直到页面加载了几秒钟。
以下是相关代码:
function $(el){switch(el[0]){case"#":return document.getElementById(el.substring(1));break;case".":return document.getElementsByClassName(el.substring(1));break;default:return document.getElementsByTagName(el);break;}}
function download() {
alert("download() executed")
}
// Attempted Scripts:
//$("#download").onclick = download()
//$("#download").addEventListener("click", download)
//document.getElementById("download").onclick = download()
//document.getElementById("download").addEventListener("click", download)
<a class = "nav-link nohighlight" id = "download" onclick = "download()">Download</a>
感觉就像我的网络浏览器只是试图确保我不运行该功能。我在最新的Edge和Firefox上测试了这个。您可以看到我的整页here。
答案 0 :(得分:3)
查看您的UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound , .badge]) {(accepted, error) in
if !accepted {
// notification access denied
}
}
标记在HTML中的位置:它在上方正文。默认情况下,脚本会立即运行:当HTML解析器跨越它们时,立即执行脚本,然后继续解析其余的HTML。因此,在您的脚本运行时,尚未创建任何元素 - 因此,选择任何元素都将失败。
将整个脚本包装在DOMContentLoaded侦听器函数中:
script
或者为您的脚本标记提供document.addEventListener('DOMContentLoaded', () => {
// put your whole script here
});
属性,该属性指示解析器仅在文档完全解析后才运行它:
defer