【发布时间】:2021-08-15 19:47:34
【问题描述】:
我会解释一下自己:我正在构建一个简单的网络,并且在 HTML 中的某个位置我有这个
<button id="choose" type="button" onclick="choose()">Choose</button>
在
中我添加了一个脚本文件,以便它知道在哪里可以找到 choose() 函数<script src="scripts.js"></script>
最后在 scripts.js 文件中我定义了下一个函数:
function choose() {
choices = document.getElementById("choices");
console.log(choices)
}
现在问题来了。当我单击按钮时,在控制台中出现“未捕获的 TypeError:选择不是函数”,但只需删除函数名称中的最后一个“e”即可完美运行。
我完全不介意改名,但我真的很好奇发生了什么。
编辑:有些人正在关注我提供的代码中没有看到的“选择”元素,但这不是他的问题(实际上只是通过更改它的函数名称作品)。无论如何,这是完整的正文代码:
<body>
<form>
Introduce one element in each line:<br/>
<textarea id="choices" rows="10" cols="70"></textarea><br/><br/>
<button id="choose" type="button" onclick="choose()">Choose</button>
</form>
<div id="result"></div>
</body>
顺便说一句,对我来说,它也发生在 Firefox 中。
【问题讨论】:
-
你的元素有
id="choose"你的JS有getElementById("choices");不是同一个词 -
如果你想知道什么是有效的,你可以看到this question
-
哦,是的,and this
-
"choose" 不是保留字(可以参考list of reserved keywords on MDN),但是当您将元素的
id属性设置为choose时,会创建一个全局变量,因此与函数名冲突。如果您将函数名称或按钮id属性更改为其他任何属性(例如,函数名称为setChoice,按钮名称为chooseButton),应该没问题。 -
我最初认为这可能是原因,但很快就产生了疑问,因为它不应该覆盖现有的属性。我也无法重现这个,我的重现尝试没有抛出(至少不是同样的错误)。
标签: javascript html