javascript - 从按钮调用函数时未捕获的 TypeError
问题描述
我正在制作一个表格来记录一群人的数据,当按下按钮添加另一个人时,控制台会吐出一个 TypeError,说 addPerson() 不是一个函数。
HTML(正文):
<form method="POST">
<h3> People </h3>
<div class="person">
<p>
<label>Name</label>
<input type="text" name="name" />
<br/>
</p>
<p>
<label>Gender</label>
<input type="radio" name="gender" value="male" />Male
<input type="radio" name="gender" value="female" />Female
<br />
</p>
<p>
<label>Date of Birth</label>
<input type="date" name="dob" />
<br/>
</p>
</div>
<br/>
<input type="button" value="Add another person" onclick="addPerson()" id="addPerson" />
</form>
<script src="client.js"></script>
Javascript:
function addPerson(){
let personForm = document.getElementsByClassName("person")[0];
let personFormCopy = personForm.cloneNode(true);
let buttonNode = document.getElementById("addPerson");
document.body.insertBefore(personFormCopy, buttonNode);
let br150 = document.createElement("br");
document.body.insertBefore(br150, buttonNode);
br150.style.lineHeight="150px";
}
错误:
Uncaught TypeError: addPerson is not a function at HTMLInputElement.onclick
解决方案
您的函数名称和按钮 ID 相同。自从 IE 引入此行为以来,一些浏览器将 DOM 元素 ID 添加到window
范围,这会导致您的情况发生冲突。
例如,可以通过将按钮的 ID 更改为 来解决此问题addPersonBtn
。
但是,我建议不要混合 HTML 和 JS。您可以改为删除onclick
HTML 中的属性,并像这样编写 JS:
document.getElementById('addPersonBtn').addEventListener('click', addPerson);
function addPerson(){
console.log('It worked.');
}
<button id="addPersonBtn">Click me</button>
推荐阅读
- javascript - 如何使用 (CSS/HTML/Javascript) 在 Hover 上添加带有动画的字母
- html - 如何确保跨度的内容在 CSS 中向右而不是向左增长
- c# - 无法将证书粘贴到受信任的根证书颁发机构存储中。访问被拒绝
- java - 为什么不能通过两个参数交换数组的两个元素?
- netcdf - NetCDF 重新排序维度
- reactjs - 从 React 中的表单发布方法获取响应
- php - 选择数据时子查询返回多于 1 行
- cmd - cd %C^ 在命令提示符中?
- javascript - 如何使用 Nodejs 和 APIGatewayProxyEvent 发送带有请求的文件
- python-3.x - 使用opencv遮蔽颜色