javascript - 根据多个单选按钮选择显示或隐藏元素

标签 javascript jquery html drop-down-menu radio-button

我有两个单选按钮

  1. 选择 A 或 B。

  2. 选择 C ​​或 D。

根据这两个选择,我希望更新我的下拉列表

这是我的代码。

    $(function() {
      $("#A").hide();
      $("#B").hide();
      $("#C").hide();
      $("#D").hide();
      $('.AorB').change(function() {
        if ($(this).val() == 'A') {
          $('.CorD').change(function() {
            if ($(this).val() == 'C') {
              $("#AC").show();
              $("#BC").hide();
              $("#AD").hide();
              $("#BD").hide();
              $("#noselect").hide();
            } else if ($(this).val() == 'D') {
              $("#AC").hide();
              $("#BC").hide();
              $("#AD").show();
              $("#BD").hide();
              $("#noselect").hide();
            }
          });
        } else if ($(this).val() == 'B') {
          $('.CorD').change(function() {
            if ($(this).val() == 'C') {
              $("#AC").hide();
              $("#BC").show();
              $("#AD").hide();
              $("#BD").hide();
              $("#noselect").hide();
            } else if ($(this).val() == 'D') {
              $("#AC").hide();
              $("#BC").hide();
              $("#AD").hide();
              $("#BD").show();
              $("#noselect").hide();
            }
          });

        } else {

          return false;
        }
      });
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script>
<tr>
  <td>
    <label>Select A or B:</label>
  </td>
  <span class="text_11">
                    <td><input type="radio" id="A" name="AorB" class="AorB" required value="A"/><radio style="font-size: 16px;"> A</radio>
                    <input type="radio" id="B" name="AorB" class="AorB" value="B"/><radio style="font-size: 16px;"> B </radio></span>
  </td>
</tr>
<tr>
  <td>
    <label>Select C or D:</label>
  </td>
  <span class="text_11">
                    <td><input type="radio" id="C" name="CorD" class="CorD" required value="C"/><radio style="font-size: 16px;"> C</radio>
                    <input type="radio" id="D" name="CorD" class="CorD" value="D"/><radio style="font-size: 16px;"> D</radio></span>
  </td>
</tr>
<tr>
  <td class="select">
    <label>Date:</label>
  </td>
  <td>
    <select id="noselect" name="noselect">
      <option value="1">Select</option>
      <option value="1">select A or B first</option>
    </select>
    <select id="AC" name="AC">
      <option value="">Select</option>
      <?php include_once "AC.php"?>
    </select>
    <select id="BC" name="BC">
      <option value="">Select</option>
      <?php include_once "BC.php"?>
    </select>
    <select id="AD" name="AD">
      <option value="">Select</option>
      <?php include_once "AD.php"?>
    </select>
    <select id="BD" name="BD">
      <option value="">Select</option>
      <?php include_once "BD.php"?>
  </td>
  </select>
</tr>

我现在有 2 个问题:

  • 场景 1:如果我选择 A,然后选择 C,下拉列表将更改为正确的值。如果我随后将 A 更改为 B,下拉列表不会更新。

  • 场景 2:如果我选择 D 或 C,然后选择 A 或 B,下拉列表不会更改。

如何改进 jquery,以便无论何时以任何顺序选择单选按钮,都会显示正确的下拉列表。对于 javascript 来说非常陌生,因此我们将不胜感激。

最佳答案

如果我正确理解您的问题,下面的内容将满足您的需要。

当前尝试的最大问题是,当您单击 A 时,您向 CorD 元素添加了一个事件处理程序,但是如果您将其更改为 B,则向 CorD 添加另一个事件处理程序元素并且您不删除原始事件处理程序,因此当您更改 CorD 时,两个事件都会被触发。正如您在下面看到的,您可以通过更简单的设置来避免这种情况和(所有其他重复的代码)

var $all=$('.all').hide();
$('.listen').change(function(){
   $all.hide()
   var thisLetter = $('[name="AorB"]:checked').val();
   var thatLetter =  $('[name="CorD"]:checked').val();
   $all.each(function(){
   var $this=$(this);
   	if($this.hasClass(thisLetter) && $this.hasClass(thatLetter)){
          $this.show();
          $('#noselect').hide();
        }
   });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="radio" id="A" name="AorB" class="listen" required value="a" />
<radio style="font-size: 16px;"> A</radio>
<input type="radio" id="B" name="AorB" class="listen" value="b" />
<radio style="font-size: 16px;"> B </radio>
<input type="radio" id="C" name="CorD" class="listen" required value="c" />
<radio style="font-size: 16px;"> C</radio>
<input type="radio" id="D" name="CorD" class="listen" value="d" />
<radio style="font-size: 16px;"> D</radio>
<br>
<br>
<select id="noselect" name="noselect">
  <option value="1">Select</option>
  <option value="1">select A or B first</option>
</select>
<select class="a c all" name="AC">
  <option value="">Select AC</option>
</select>
<select class="b c all" name="BC">
  <option value="">Select BC</option>
</select>
<select class="a d all" name="AD">
  <option value="">Select AD</option>
</select>
<select class="b d all" name="BD">
  <option value="">Select BD</option>
</select>

关于javascript - 根据多个单选按钮选择显示或隐藏元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35642254/

相关文章:

jquery - 页面进度条

html - 如何识别 HTML 中的换行符 (\n)

javascript - CSS、JavaScript风格的动态表格

javascript - 添加新的全日历事件后添加类名

javascript - 使用相同的 Bootstrap 模式来添加新对象并编辑该对象

jquery - 弹出 html 页面作为 jQuery UI 对话框?

jquery - 获取最后可见的 div 的属性

html - 我可以在 HTML 电子邮件中使用 columns 标签吗

javascript - 默认日期(今天)bootstrap datepicker IE

javascript - 创建新合成并应用名称 Adob​​e cs5 脚本