基于CSS/HTML/JS实现单选框联动下拉内容填充的问题求助
问题分析与解决方案
嘿,我仔细看了你的代码,发现两个核心问题导致功能失效,咱们一步步来修复:
1. 嵌套<form>标签是大忌
HTML规范里不允许表单嵌套,你外层的<form>和内层的<form>会导致表单控件的归属混乱——当你点击单选框时,this.form指向的是内层表单,而golfcoursename1属于外层表单,所以JS根本拿不到它的值,这就是复制功能失效的主要原因。
2. JavaScript逻辑错误
你的FillWinner函数里有明显的逻辑矛盾:刚把winner赋值为golfcoursename1的值,紧接着又覆盖成golfcoursename2的内容,而且还写了两个重复的函数,完全没必要。
修复后的完整代码
<!-- 只保留一个顶级表单,关闭自动补全 --> <form autocomplete="off" action="/action_page.php"> <div class="autocomplete" style="width:300px;"> Course 1 <input id="myInput" type="text" name="golfcoursename1" placeholder="Golf Course"> </div> <div class="autocomplete" style="width:300px;"> Course 2 <input id="myInput1" type="text" name="golfcoursename2" placeholder="Golf Course"> </div> <p> WINNER </p> <!-- 统一绑定到同一个函数,不用写两个 --> <input type="radio" id="Course1" name="winnerselected" value="Course1" onclick="updateWinner(this)"> <label for="Course1">Course 1</label> <input type="radio" id="Course2" name="winnerselected" value="Course2" onclick="updateWinner(this)"> <label for="Course2">Course 2</label><br> <input type="text" id="winner" name="Winner" placeholder="Winner"> <p> </p> <input type="submit"> </form> <script> function updateWinner(radio) { // 获取当前表单对象 const form = radio.form; // 根据单选框的value判断要复制哪个课程的内容 if (radio.value === 'Course1') { form.winner.value = form.golfcoursename1.value; } else if (radio.value === 'Course2') { form.winner.value = form.golfcoursename2.value; } } </script>
关键优化点说明
- 移除了嵌套的
<form>,确保所有表单控件都属于同一个表单,JS能正确获取到各个输入框的值 - 合并了两个点击函数为
updateWinner,通过单选框的value来区分操作,代码更简洁易维护 - 直接通过传入的
radio参数获取表单,比原来的this.form更清晰,避免歧义
这样修改后,单选框的选择功能正常,同时能正确将选中课程的内容填充到WINNER输入框里啦!
内容的提问来源于stack exchange,提问作者Blakey




