javascript - Node.appendChild:参数1在纯JS中没有实现接口Node
问题描述
我正在尝试创建一个带有列表的表单。该按钮负责向表单中的列表添加一个新元素。HTML:
<form id="newBrand">
<fieldset>
<ul id="formCars">
<li>
<legend>Car 1</legend>
<label>Name
<input type="text" name="carName1" />
</label>
</li>
</ul>
</fieldset>
<button type="button" id="addCar">+</button>
</form>
还有我的 JS 代码:
const form = document.getElementById('newBrand');
const formCars = document.getElementById('formCars');
const addCarBtn = document.getElementById('addCar');
addCarBtn.addEventListener('click', () => formCars.appendChild(createBrandCar));
function createBrandCar() {
const result = document.createElement('li');
let size = formCars.getElementsByTagName('li').length;
result.innerHTML = `
<legend>Car ${size}</legend>
<label>Name
<input type="text" name="carName${size}" />
</label>`;
return result
}
我的应用程序渲染得很好,但是当我单击按钮时,我得到了这个错误:
Uncaught TypeError: Node.appendChild: Argument 1 does not implement interface Node.
此错误指向包含此代码的行:
addCarBtn.addEventListener('click', () => formCars.appendChild(createBrandCar));
我能做些什么来防止这个错误发生?
解决方案
您应该通过在函数名称后指定括号来调用该函数:
addCarBtn.addEventListener('click', () => formCars.appendChild(createBrandCar()));
此外,由于您在页面加载时已经有一个列表项,您应该将大小增加 1:
let size = ++formCars.getElementsByTagName('li').length;
演示:
const form = document.getElementById('newBrand');
const formCars = document.getElementById('formCars');
const addCarBtn = document.getElementById('addCar');
addCarBtn.addEventListener('click', () => formCars.appendChild(createBrandCar()));
function createBrandCar() {
const result = document.createElement('li');
let size = ++formCars.getElementsByTagName('li').length;
result.innerHTML = `
<legend>Car ${size}</legend>
<label>Name
<input type="text" name="carName${size}" />
</label>`;
return result
}
<form id="newBrand">
<fieldset>
<ul id="formCars">
<li>
<legend>Car 1</legend>
<label>Name
<input type="text" name="carName1" />
</label>
</li>
</ul>
</fieldset>
<button type="button" id="addCar">+</button>
</form>
推荐阅读
- c - 如何使用 c 代码对 1 维进行矩阵求逆?
- python - 字典对象不可调用的 com 请求
- javascript - 使用支持 IE11 的 vanilla JavaScript 按价格对 UL 进行排序
- html - 表单只有 10 个按钮,但用户只能选择 1 个
- css - 父母根据孩子扩大高度
- flutter - 在 Flutter 中用照片填充卡片小部件
- python - 多个 KPI 字段的 K-mean
- java - java如何从数据库中摆动RGB颜色和JTable单元格Bg颜色
- codenameone - Android BOOT_COMPLETE 接收器在 CN1 上不起作用
- java - 删除列表中包含某些单词的项目的有效方法?