我有一些html代码,部分工作。我试图让一些文本输入显示取决于单选按钮的选择。我有它的工作,当一个单选按钮被按下,它确实隐藏了其他选项,但在屏幕的第一次加载所有3个选项显示。我,假设这是因为函数是在点击时调用的,并且第一个单选按钮的选中选项不构成点击。我尝试做一个onload事件listentner,它只会在我第一次请求的状态下显示,但是没有成功。
<% layout('layouts/boilerplate') %>
<h1>New Part</h1>
<form action="/parts" method="POST" novalidate class="validated-form">
<div>
<label class="form-label" for="partnum">Part Number</label>
<input class="form-control" type="text" name="part[partnum]" id="partnum" required>
</div>
<div>
<label class="form-label" for="description">Part Description</label>
<input class="form-control" type="text" name="part[description]" id="description" required>
</div>
<div class="btn-group" role="group" aria-label="Basic radio toggle button group">
<input type="radio" class="btn-check" name="part[type]" id="btnradio1" value="Purchased" autocomplete="off" onclick="show1()" checked >
<label class="btn btn-outline-primary" for="btnradio1">Purchased</label>
<input type="radio" class="btn-check" name="part[type]" id="btnradio2" value="Assembly" autocomplete="off" onclick="show2()">
<label class="btn btn-outline-primary" for="btnradio2">Assembly</label>
<input type="radio" class="btn-check" name="part[type]" id="btnradio3" value="Machined" autocomplete="off" onclick="show3()">
<label class="btn btn-outline-primary" for="btnradio3">Machined</label>
</div>
<div>
<h1 id="test1">Test 1</h1>
</div>
<div>
<h1 id="test2" >Test 2</h1>
</div>
<div id="machined">
<h1 id="test3" >Test 3</h1>
<div>
<label class="form-label" for="material">Material</label>
<input class="form-control" type="text" name="part[material]" id="material" required>
</div>
</div>
<div><button>Add Part</button></div>
</form>
<a href="/parts">Back to your Parts</a>
<script>
function show1(){
document.getElementById('test1').style.display ='block';
document.getElementById('test2').style.display ='none';
document.getElementById('machined').style.display ='none';
}
function show2(){
document.getElementById('test1').style.display ='none';
document.getElementById('test2').style.display ='block';
document.getElementById('machined').style.display ='none';
}
function show3(){
document.getElementById('test1').style.display ='none';
document.getElementById('test2').style.display ='none';
document.getElementById('machined').style.display ='block';
}
</script>
1条答案
按热度按时间ttp71kqs1#
让我们把每个需要有条件显示/隐藏的部分称为“子表单”。你可以为每个子表单添加一个CSS类,例如:
然后,你可以引入CSS规则来隐藏所有子表单,除了与当前选择的选项对应的子表单。跟踪该选择以便CSS可以看到它的一个好方法是将其作为包含所有选项的元素上的数据属性,例如
<form>
。您的初始值将确定初始可见的子表单:。。。以及相应的样式。。
为了将它们联系在一起,我们可以创建一个JS函数来更新data属性。也许你在一个页面上(甚至在一个表单中)有多组子表单,所以识别你正在更新的选择是很有用的:
一个三个三个一个
如果你需要额外的选项,你可以添加额外的
subform
CSS类;如果你需要多组子表单,你可以添加它们,确保使用一个单独的HTML元素和一个唯一的id
来包含所有的子表单。请参阅完整的代码片段以获得一个工作示例。