【问题标题】:How can I update select options based on selected radio button?如何根据选定的单选按钮更新选择选项?
【发布时间】:2020-01-25 01:08:16
【问题描述】:

我有一个班级作业,我们必须创建一个网站,其中包含 4 个不同的单选按钮,但对于每个按钮,都有一个下拉列表,每个按钮都有不同的选项。我正在努力弄清楚如何将其放入 JavaScript 中。

有 4 天可供您选择:第 1 天、第 2 天、第 3 天和第 4 天。第 1 天和第 3 天的时间为下午 2 点、下午 5 点和晚上 8 点;而第 2 天和第 4 天的时间是下午 1 点和下午 4 点。

这是我目前的代码:

function onLoad() {
  //method for button times
  var select = document.getElementById("day1");
  select.options[select.options.length] = new Option("2:00 PM", "2pm");

  var select = document.getElementById("day1");
  select.options[select.options.length] = new Option("5:00 PM", "5pm");

  var select = document.getElementById("day1");
  select.options[select.options.length] = new Option("8:00 PM", "8pm");

  var select = document.getElementById("day2");
  select.options[select.options.length] = new Option("1:00 PM", "1pm");

  var select = document.getElementById("day2");
  select.options[select.options.length] = new Option("4:00 PM", "4pm");
}

这是 index.html 文件中的相关部分:

<h2>Choose Your Date</h2>
<input type="radio" value="sat_feb8" name="date1" id="day1" onclick="onLoad();" checked="checked">
<label for="size1">Saturday, February 8</label>
<br>

<input type="radio" value="sun_feb9" name="date1" id="day2" onclick="onLoad()">
<label for="size2">Sunday, February 9</label>
<br>

<input type="radio" value="sat_feb15" name="date1" id="day1" onclick="onLoad()">
<label for="size3">Saturday, February 15</label>
<br>

<input type="radio" value="sun_feb15" name="date1" id="day1" onclick="onLoad()">
<label for="size4">Sunday, February 16</label>
<br>

我为索引页面中的每个按钮调用了onLoad 函数。 谢谢!

【问题讨论】:

  • 为什么不在html 中创建dropdowns 本身?
  • 我应该为这两天的每一天创建下拉菜单吗?如何让一组时间显示在另一组时间之上?
  • ID 必须是唯一的
  • @DanielSchroederDev 不正确,因为所有输入都具有相同的 name 属性。
  • 您可以从您不需要的inputs 中删除id 属性。 onLoad 中的逻辑应该是:获取date1 的值(我相信你会找到方法的),然后,set the options 基于你在问题中描述的逻辑。尝试遵循该逻辑,如果您有后续问题,mention me

标签: javascript html


【解决方案1】:

这里是示例代码。您可以有两组单选按钮并根据日期选择显示/隐藏。希望这会有所帮助。

function onLoad() {
  //method for button times
  var group1 = document.getElementById("group1");
  group1.classList.remove('hide');
  group1.classList.add('show');
  
  var group2 = document.getElementById("group2");
  group2.classList.remove('show');
  group2.classList.add('hide');
}


function onLoad2() {
  //method for button times
  var group2 = document.getElementById("group2");
  group2.classList.remove('hide');
  group2.classList.add('show');
  
  var group1 = document.getElementById("group1");
  group1.classList.remove('show');
  group1.classList.add('hide');
}
.hide {
  display: none;
}

.show {
  display: block;
}
<h2>Choose Your Date</h2>
<input type="radio" value="sat_feb8" name="date1" id="day1" onclick="onLoad();">
<label for="size1">Saturday, February 8</label>
<br>

<input type="radio" value="sun_feb9" name="date1" id="day2" onclick="onLoad2()">
<label for="size2">Sunday, February 9</label>
<br>

<input type="radio" value="sat_feb15" name="date1" id="day1" onclick="onLoad()">
<label for="size3">Saturday, February 15</label>
<br>

<input type="radio" value="sun_feb15" name="date1" id="day1" onclick="onLoad2()">
<label for="size4">Sunday, February 16</label>
<br>

<h2>Choose Time</h2>
<div id="group1" class="hide">
<select>
<option>2 PM</option>
<option>5 PM</option>
<option>8 PM</option>
</select>
</div>

<div id="group2" class="hide">
<select>
<option>1 PM</option>
<option>4 PM</option>
</select>
</div>

【讨论】:

  • 这正是我所需要的,但我如何才能得到它,因为时间在下拉列表中而不是单选按钮中?
  • 有没有办法将 div 中的样式(style="display")放入 css 中,使其不在 html 中?
  • @student0562,使用 css 类进行了更新。
【解决方案2】:

不要使用js 创建dropdown,而是使用select 直接将它们添加到html。您可以为每个radio 按钮创建容器并添加change 事件。触发更改事件时,您可以通过获取单击的单选按钮的父级,然后获取其中的 select 元素来显示它的下拉列表。然后把它的显示样式改为block。

document.querySelectorAll('input')
  .forEach(input => {
    input.addEventListener('change', function() {
      document.querySelectorAll('select').forEach(select => select.style.display = "none");
      const selectEle = this.parentElement.querySelector('select');
      selectEle.style.display = "block";
    });
  });
  
  document.querySelector('input:checked').parentElement.querySelector('select').style.display = "block";
select {
    display: none;
}
<h2>Choose Your Date</h2>
<div>
  <input type="radio" value="sat_feb8" name="date1" id="day1" checked="checked">
  <label for="size1">Saturday, February 8</label>

  <select>
    <option value="2pm">2:00 PM</option>
    <option value="5pm">5:00 PM</option>
    <option value="8pm">8:00 PM</option>
  </select>
</div>
<div>
  <input type="radio" value="sun_feb9" name="date1" id="day2">
  <label for="size2">Sunday, February 9</label>
  <select>
    <option value="1pm">1:00 PM</option>
    <option value="4pm">4:00 PM</option>
  </select>
</div>
<div>
  <input type="radio" value="sat_feb15" name="date1" id="day3">
  <label for="size3">Saturday, February 15</label>

  <select>
    <option value="2pm">2:00 PM</option>
    <option value="5pm">5:00 PM</option>
    <option value="8pm">8:00 PM</option>
  </select>
</div>
<div>
  <input type="radio" value="sun_feb15" name="date1" id="day4">
  <label for="size4">Sunday, February 16</label>
  <select>
    <option value="1pm">1:00 PM</option>
    <option value="4pm">4:00 PM</option>
  </select>
</div>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-10
    • 2012-12-20
    • 2018-03-24
    • 2015-08-17
    • 1970-01-01
    • 2010-12-25
    • 2018-11-16
    • 1970-01-01
    相关资源
    最近更新 更多