javascript - 根据另一个选择的结果更改 HTML <select> 中的选项

标签 javascript jquery html select

不确定我在这里做错了什么,我将我的代码放在一个 jsfiddle 中,这样它可能更容易阅读和调试。无论我从列表中选择什么选项,它都认为这是我选择的“单人房”值。如果房间是单人房,应该显示最多 5 的奇数,如果选择双人房(和 < 7),则应该显示偶数,对于家庭房,显示的数字应该仅为 7。

这是 fiddle ,https://jsfiddle.net/35rchfup/

感谢任何能提前提供帮助的人。

<div class="form-group">
 <label class="col-md-4 control-label" for="chooseRoomType">Choose room 
type:</label>
<div class="col-md-4">
<label class="select" for="chooseRoomType">
  <div class="select">
    <select class="form-control" runat="server" id="chooseRoomType" onchange="showValidRooms">
      <option value="0">Choose room</option>
      <option value="1">Single room</option>
      <option value="2">Double room</option>
      <option value="3">Family room</option>
    </select>
  </div>
</label>
</div>
</div>

<div class="form-group">
<label class="col-md-4 control-label" for="chooseRoomNo">Choose room number:
</label>
 <div class="col-md-4">
   <label class="select" for="chooseRoomNo">
     <div class="select">
      <select class="form-control" runat="server" id="chooseRoomNo">
      <option value="1">1</option>
      <option value="2">2</option>
      <option value="3">3</option>
      <option value="4">4</option>
      <option value="5">5</option>
      <option value="6">6</option>
      <option value="7">7</option>
    </select>
  </div>
</label>
 </div>

<script>
   document.getElementById("chooseRoomType").onchange = function() {
 showRooms()
};

function showRooms() { //chooses single room every time
  var select = document.getElementById("chooseRoomNo");
  var selectedValue = select.options[select.selectedIndex].value;
  if (selectedValue == 1) {
$('#chooseRoomNo')
  .empty()
  .append('<option value="1">1</option>', '<option value="3">3</option>', 
'<option value="5">5</option>');
 } else if (selectedValue == 2) {
   $('#chooseRoomNo')
     .empty()
     .append('<option value="2">2</option>', '<option value="4">4</option>', 
  '<option value="6">6</option>');
   } else if (selectedValue == 3) {
    //show family room (number 7)
    $('#chooseRoomNo')
     .empty()
     .append('<option value="7">7</option>');
 } else if (selectedValue == 0) {
    alert("You must choose a room type.");
}

 console.log(selectedValue);//always 1
 }
</script>

最佳答案

更改了您的示例:https://jsfiddle.net/35rchfup/2/

你有两个问题:

1) 您指的是错误的下拉菜单 ( var select = document.getElementById("chooseRoomNo"); )

2) 你没有调用函数 onchange ( <select class="form-control" runat="server" id="chooseRoomType" onchange="showValidRooms"> ),因为你通过 JavaScript 绑定(bind)了你的事件

这里是你的例子:

document.getElementById("chooseRoomType").onchange = function() {
  showRooms()
};

function showRooms() { //chooses single room every time
  var selectedValue = $("#chooseRoomType").val();
  if (selectedValue == 1) {
    $('#chooseRoomNo')
      .empty()
      .append('<option value="1">1</option>', '<option value="3">3</option>', '<option value="5">5</option>');
  } else if (selectedValue == 2) {
    $('#chooseRoomNo')
      .empty()
      .append('<option value="2">2</option>', '<option value="4">4</option>', '<option value="6">6</option>');
  } else if (selectedValue == 3) {
    //show family room (number 7)
    $('#chooseRoomNo')
      .empty()
      .append('<option value="7">7</option>');
  } else if (selectedValue == 0) {
    alert("You must choose a room type.");
  }

  console.log(selectedValue);//always 1
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script
  src="https://code.jquery.com/jquery-3.2.1.min.js"
  integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
  crossorigin="anonymous"></script>
<div class="form-group">
  <label class="col-md-4 control-label" for="chooseRoomType">Choose room type:</label>
  <div class="col-md-4">
    <label class="select" for="chooseRoomType">
      <div class="select">
        <select class="form-control" runat="server" id="chooseRoomType">
          <option value="0">Choose room</option>
          <option value="1">Single room</option>
          <option value="2">Double room</option>
          <option value="3">Family room</option>
        </select>
      </div>
    </label>
  </div>
</div>

<div class="form-group">
  <label class="col-md-4 control-label" for="chooseRoomNo">Choose room number:</label>
  <div class="col-md-4">
    <label class="select" for="chooseRoomNo">
      <div class="select">
        <select class="form-control" runat="server" id="chooseRoomNo">
          <option value="1">1</option>
          <option value="2">2</option>
          <option value="3">3</option>
          <option value="4">4</option>
          <option value="5">5</option>
          <option value="6">6</option>
          <option value="7">7</option>
        </select>
      </div>
    </label>
  </div>
</div>

关于javascript - 根据另一个选择的结果更改 HTML <select> 中的选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44141545/

相关文章:

javascript - 在 Safari 的事件窗口的新选项卡中打开 URL

javascript - 视觉 : How to wait until one method completes before firing another

javascript - jQuery 中的引用?

jquery - 将树展开到特定级别

html - 选择最后一个普通 sibling

Javascript看不到2个textarea id之间的区别

javascript - HTML:Base64 图像显示/复制高度错误

javascript - 如何在 O(lg N) 时间内解决完美平方时避免极端情况?

javascript - 改变每个 div 的路线

html - Firefox 的外部样式