javascript - 现有函数不是函数?

标签 javascript html

所以我正在做一个项目。我的功能运行良好,直到我突然点击了一个应该运行 download() 的按钮,但它没有运行。所以我打开控制台,看到了这个:

TypeError: download is not a function

我很困惑。我从控制台运行 download(),它工作正常。所以我认为这可能是 onclick 的问题(我的按钮有 onclick="download()"),所以我改用 JavaScript 添加点击事件。

$("#download").onclick=download()

注意:$() 是自定义的 jQuery 式函数,不使用框架本身。它在解决这个问题的同时还有很多其他用途。
但这也不管用。所以我也尝试使用

$("#download").addEventListener("click", download)

这又是行不通的。两次它都表示 $()null。所以我冒险尝试使用

document.getElementById("download").onclick=download()

addEventListener() 相同。但这给了我一个非常令人惊讶的错误信息:

TypeError: document.getElementById(...) is 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 .

最佳答案

查看 script 标记在 HTML 中的位置:它在正文的上方。默认情况下,脚本会立即运行:当 HTML 解析器运行它们时,它会立即执行脚本,然后再继续解析 HTML 的其余部分。因此,在您的脚本运行时,尚未创建任何元素 - 因此,选择任何元素都将失败。

要么将整个脚本包装在 DOMContentLoaded 监听器函数中:

document.addEventListener('DOMContentLoaded', () => {
  // put your whole script here
});

或者给你的脚本标签 defer 属性,它指示解析器只在文档被完全解析后运行它:

<script src = "index.js" defer></script>

关于javascript - 现有函数不是函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49890510/

相关文章:

javascript - 同时不超过 3 个字母的正则表达式不应接受 1a1a1a1a1

php - 如何使用PHP、MYSQL等语言创建考勤记录接口(interface)?

java - jsoup : How to search for date text from a webpage

javascript - 在表中启用和禁用 td

javascript - keydown 不会在移动设备上触发 Chrome

javascript - JS代码未执行

asp.net - 在重用和逻辑封装方面使用 ASP.NET 构建 JavaScript UI 代码的最佳方式?

javascript - 带有内联 onsubmit 的表单不会从 iframe 中触发

html - Bootstrap 类容器不起作用

c# - 如何在mvc中获取网页的特定部分?