javascript - HTML - 从一个表单模板创建多个表单
问题描述
我目前有多种相似但变化很小的表格。首先,用户从下拉菜单中选择表单,然后表单如下所示。
我的表格看起来像这样。
- 表格 1
- 顾客姓名
- 电话号码
- 地址
- 表格 2
- 顾客姓名
- 已结婚?
- 表格 3
- 顾客姓名
- 社会安全号码
- 地址
我的代码看起来像这样。
<select onchange="changeOptions(this)">
<option value="" selected="selected"></option>
<option value="form1">f1</option>
<option value="form2">f2</option>
<option value="form3">f3</option>
</select>
<form class="className" name="form1" id="form1" style="display:none">
---form---
<form class="className" name="form2" id="form2" style="display:none">
---form---
<form class="className" name="form3" id="form3" style="display:none">
---form---
<script>
function changeOptions(selectEl) {
let selectedValue = selectEl.options[selectEl.selectedIndex].value;
let subForms = document.getElementsByClassName('className')
for (let i = 0; i < subForms.length; i += 1) {
if (selectedValue === subForms[i].name) {
subForms[i].setAttribute('style', 'display:block')
} else {
subForms[i].setAttribute('style', 'display:none')
}
}
}
</script>
有没有办法创建一个包含所有表单元素的“主”表单,然后指定在每个表单中使用哪个元素?我现在使用的方法工作正常,但是重复的代码太多,如果我尝试更改其中一个元素可能无法正确缩放(因为我必须更改它们中的每一个并且它会容易出错)
解决方案
您不需要三种不同的表单,只需一个表单,其中所有字段都设置为隐藏。然后给每个字段一个类匹配应该显示该字段的形式。然后简单地显示基于所选值的匹配字段。
select_form = document.querySelector(".select_form");
fields = document.querySelectorAll(".field");
select_form.addEventListener("change", function() {
fields.forEach(function(el) {
el.style.display = "none";
});
show = document.querySelectorAll("." + this.value);
show.forEach(function(el) {
el.style.display = "block";
});
});
.field {
display: none;
}
<select class="select_form">
<option value="" selected="selected"></option>
<option value="form1">f1</option>
<option value="form2">f2</option>
<option value="form3">f3</option>
</select>
<form>
<div class="field form1 form2">ONLY form1 and 2</div>
<div class="field form3">ONLY form3</div>
</form>
推荐阅读
- python - 如何查看带有条件元素的许多图像
- reactjs - 钩子在子组件中的单个更改上重新渲染整个页面
- r - 从多个 XML 文件创建文本数据框
- reactjs - useContext 与 immutableJS
- c - C将void指针数组传递给函数
- php - 我想问如何将此mysqli代码更改为PDO?其他页面无法解决我的问题
- powershell - 从 Get-Childitem 捕获不可访问文件夹的路径
- python - 如何在 django rest 框架序列化程序中序列化布尔值列表?
- javascript - this.props.navigation.navigate() 不工作
- python - Confused Regarding PyTorch GRU Docs