javascript - 复杂的 if else jQuery 语句

标签 javascript jquery html forms

我有一些 jQuery 语句,它们显示一个 div,该 div 取决于用户从下拉/选择字段中所做的一些选择。

我想知道这是否是正确的做法?显示的 div 取决于所有下拉列表/选择字段(3 个选择/下拉列表)中给出的答案,但有时仅根据该逻辑显示的 div 无论如何都会显示选择/下拉列表中的其他选项。

下面是我的代码:

$(function() {
  $('.age').on('change', function() {
    if ($(this).val() === "col1") {
      $('.subject').on('change', function() {
        if ($(this).val() === "col1_ge") {
          $('.location').change(function() {
            $('#sbcox-ge').toggle($(this).val() == 'col1_sbco');
          });
        } else if ($(this).val() === "col1_ss") {
          $('.location').change(function() {
            $('#sbcox-ss').toggle($(this).val() == 'col1_sbco');
          });
        } else {}
      });
    } else if ($(this).val() === "col2") {} else {}
  });
});

$(document).ready(function() {
  $("#subject_select").children('option:gt(0)').hide();
  $("#area_select").children('option:gt(0)').hide();
  $("#age_select").change(function() {
    $("#subject_select").children('option').hide();
    $("#subject_select").children("option[value^=" + $(this).val() + "]").show()
    $("#area_select").children('option').hide();
    $("#area_select").children("option[value^=" + $(this).val() + "]").show()
  })
})
.inner-modal {
  display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="decider-form">
  <div class="container">
    <div class="row">

      <div class="col-lg-3 col-md-3 col-sm-12">
        <select name="age_select" id="age_select" class="age">
          <option value="age-fill">1. Age</option>
          <option value="col1">8</option>
          <option value="col1">9</option>
          <option value="col1">10</option>
          <option value="col2">11</option>
          <option value="col3">12</option>
          <option value="col4">13</option>
          <option value="col5">14</option>
          <option value="col6">15</option>
          <option value="col7">16</option>
          <option value="col8">17</option>
        </select>
      </div>

      <div class="col-lg-3 col-md-3 col-sm-12">
        <select name="subject_select" id="subject_select" class="subject">
          <option value="subject-fill">2. Subject</option>

          <!--Below shows when '1 column' is selected is hidden otherwise-->
          <option value="col1_subject-fill">2. Subject</option>
          <option value="col1_ge">GE</option>
          <option value="col1_ss">SS</option>

          <!--Below shows when '2 column' is selected is hidden otherwise-->
          <option value="col2_subject-fill">2. Subject</option>
          <option value="col2_ge">GE</option>
          <option value="col2_ss">SS</option>


          <!--Below shows when '3 column' is selected is hidden otherwise-->
          <option value="col3_mss">layout 3</option>
          <option value="col3_ssm">layout 4</option>
          <option value="col3_sms">layout 5</option>

          <option value="col4_mss">layout test 4</option>
        </select>
      </div>

      <div class="col-lg-3 col-md-3 col-sm-12">
        <select name="area_select" id="area_select" class="location">
          <option value="location-fill">3. Location</option>

          <!--Below shows when '1 column' is selected is hidden otherwise-->
          <option value="col1_location-fill">3. Location</option>
          <option value="col1_sbco">SBCO</option>

          <!--Below shows when '2 column' is selected is hidden otherwise-->
          <option value="col2_location-fill">3. Location</option>
          <option value="col2_sbco">SBCO</option>
          <option value="col2_sbcc">SBCC</option>

          <!--Below shows when '3 column' is selected is hidden otherwise-->
          <option value="col3_mss">layout 3</option>
          <option value="col3_ssm">layout 4</option>
          <option value="col3_sms">layout 5</option>
        </select>
      </div>

      <div class="col-lg-3 col-md-3 col-sm-12" id="button-overall">
        <div class="call-to-action">

          <a class="call-action" href="#">See Your Course</a>
        </div>
      </div>

      <div class="col-lg-3 col-md-3 col-sm-12 inner-modal" id="sbcox-ge">
        <div class="call-to-action">
          <a class="call-action" href="link here" target="_blank">See GE</a>
        </div>
      </div>

      <div class="col-lg-3 col-md-3 col-sm-12 inner-modal" id="sbcox-ss">
        <div class="call-to-action">
          <a class="call-action" href="link here" target="_blank">See SS</a>
        </div>
      </div>

    </div>
    <!--End Row-->
  </div>
  <!--End Container-->
</div>
<!--End Decider Form-->

最佳答案

不要将事件处理程序绑定(bind)到其他事件处理程序内。只需让相关事件在运行时检查其他输入的值即可。

$(function() {
  $(".location").change(function() {
    var age = $(".age").val();
    var subject = $(".subject").val();
    if (age == "col1") {
      if (subject == "col1_ge") {
        $("#sbcox-ge").toggle($(this).val() == "col1_sbco");
      } else if (subject == "col1_ss") {
        $("#sbcox-ss").toggle($(this).val() == "col1_sbco");
      } else {}
    } else if (age == "col2") {} 
      else {}
  });

  $("#subject_select").children('option:gt(0)').hide();
  $("#area_select").children('option:gt(0)').hide();
  $("#age_select").change(function() {
    $("#subject_select").children('option').hide();
    $("#subject_select").children("option[value^=" + $(this).val() + "]").show()
    $("#area_select").children('option').hide();
    $("#area_select").children("option[value^=" + $(this).val() + "]").show()
  })
})
.inner-modal {
  display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="decider-form">
  <div class="container">
    <div class="row">

      <div class="col-lg-3 col-md-3 col-sm-12">
        <select name="age_select" id="age_select" class="age">
          <option value="age-fill">1. Age</option>
          <option value="col1">8</option>
          <option value="col1">9</option>
          <option value="col1">10</option>
          <option value="col2">11</option>
          <option value="col3">12</option>
          <option value="col4">13</option>
          <option value="col5">14</option>
          <option value="col6">15</option>
          <option value="col7">16</option>
          <option value="col8">17</option>
        </select>
      </div>

      <div class="col-lg-3 col-md-3 col-sm-12">
        <select name="subject_select" id="subject_select" class="subject">
          <option value="subject-fill">2. Subject</option>

          <!--Below shows when '1 column' is selected is hidden otherwise-->
          <option value="col1_subject-fill">2. Subject</option>
          <option value="col1_ge">GE</option>
          <option value="col1_ss">SS</option>

          <!--Below shows when '2 column' is selected is hidden otherwise-->
          <option value="col2_subject-fill">2. Subject</option>
          <option value="col2_ge">GE</option>
          <option value="col2_ss">SS</option>


          <!--Below shows when '3 column' is selected is hidden otherwise-->
          <option value="col3_mss">layout 3</option>
          <option value="col3_ssm">layout 4</option>
          <option value="col3_sms">layout 5</option>

          <option value="col4_mss">layout test 4</option>
        </select>
      </div>

      <div class="col-lg-3 col-md-3 col-sm-12">
        <select name="area_select" id="area_select" class="location">
          <option value="location-fill">3. Location</option>

          <!--Below shows when '1 column' is selected is hidden otherwise-->
          <option value="col1_location-fill">3. Location</option>
          <option value="col1_sbco">SBCO</option>

          <!--Below shows when '2 column' is selected is hidden otherwise-->
          <option value="col2_location-fill">3. Location</option>
          <option value="col2_sbco">SBCO</option>
          <option value="col2_sbcc">SBCC</option>

          <!--Below shows when '3 column' is selected is hidden otherwise-->
          <option value="col3_mss">layout 3</option>
          <option value="col3_ssm">layout 4</option>
          <option value="col3_sms">layout 5</option>
        </select>
      </div>

      <div class="col-lg-3 col-md-3 col-sm-12" id="button-overall">
        <div class="call-to-action">

          <a class="call-action" href="#">See Your Course</a>
        </div>
      </div>

      <div class="col-lg-3 col-md-3 col-sm-12 inner-modal" id="sbcox-ge">
        <div class="call-to-action">
          <a class="call-action" href="link here" target="_blank">See GE</a>
        </div>
      </div>

      <div class="col-lg-3 col-md-3 col-sm-12 inner-modal" id="sbcox-ss">
        <div class="call-to-action">
          <a class="call-action" href="link here" target="_blank">See SS</a>
        </div>
      </div>

    </div>
    <!--End Row-->
  </div>
  <!--End Container-->
</div>
<!--End Decider Form-->

关于javascript - 复杂的 if else jQuery 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58975746/

相关文章:

javascript - 如果页面 url = 列表中的 anchor ,则触发鼠标悬停 + 加粗

javascript - 突出显示单词和 div 的搜索框

javascript - 在 Python/JavaScript 中解析和构造类似于 SQL WHERE 子句的过滤查询

jquery - 我怎样才能从类(class)中删除角色?

javascript - Slick Carousel css 淡入淡出过渡不适用于第一个 slider

javascript - 如何在 LG webos 电视上播放音频

jquery - 使用 jQuery 通过 id 定位隐藏输入

jquery - 仅在 Bootstrap Datepicker 中将日期选择限制为非过去的月份

jquery - 单击主元素时如何显示和隐藏子菜单?

javascript - 每次刷新时更改数字?