You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

基于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

火山引擎 最新活动