【问题标题】:How jQuery to change a second select list based on the Third select list option and second select based upon firstjQuery 如何根据第三个选择列表选项更改第二个选择列表,并根据第一个选择更改第二个选择列表
【发布时间】:2016-08-08 09:33:34
【问题描述】:

为什么第三个选择选项会根据第二个选项发生变化。但是当第一个选择被选中时,第二个正在改变。而去第二个第三个没有改变 这是我的看法。

<select name="select1" select="select1">
  <option value="">Select Country</option>
  <option value="india">India</option>
  <option value="america">America</option>
</select>
<select name="select2" id="select2">
  <option value="">Select State</option>
  <option data-value="orissa" value="india">Orissa</option>
  <option data-value="telangan" value="india">Telangan</option>
  <option data-value="america" value="america">USA</option>
  <option data-value="america" value="america">California</option>
</select>
<select name="select3" id="select3">
  <option value="">Select city</option>
  <option value="orissa">Nal</option>
  <option value="orissa">Mir</option>
  <option value="Telangan">Hyd</option>
  <option value="Telangan">Vija</option>
  <option value="america">KRK</option>
  <option value="america">MRK</option>
</select>
This is my script
<script>
  $("#select1").change(function() {
    if ($(this).data('options') == undefined) {
      $(this).data('options', $('#select2 option').clone());
    }
    var id = $(this).val();
    var options = $(this).data('options').filter('[value=' + id + ']');
    $('#select2').html(options);
    });
  $("#select2").change(function() {
  if ($(this).data('options') == undefined) {
    $(this).data('options', $('#select3 option').clone());
  }
  var id = $(this).val();
  var options = $(this).data('options').filter('[data-value=' + id + ']');
  $('#select3').html(options);
});
</script>

【问题讨论】:

    标签: javascript jquery html select


    【解决方案1】:

    Select1 不起作用,因为 HTML 中没有 select1 的 id 属性。

    <!-- change -->
    <select name="select1" select="select1">
    <!-- to -->
    <select name="select1" id="select1">
    

    此外,数据值和选项值之间似乎有些不匹配。

    1. 尽量保留val 以获取期权的实际价值,并保留data-value 以获取其前身。
    2. 这两个值都区分大小写,所以'telangan' !== 'Telangan'

    这是您的代码的更新版本:

    $("#select1").change(function() {
      if ($(this).data('options') == undefined) {
        $(this).data('options', $('#select2 option').clone());
      }
      var id = $(this).val();
      var options = $(this).data('options').filter('[data-value=' + id + ']');
      $('#select2').html(options).show();
    });
    
    
    $("#select2").change(function() {
      if ($(this).data('options') == undefined) {
        $(this).data('options', $('#select3 option').clone());
      }
      var id = $(this).val();
      var options = $(this).data('options').filter('[data-value=' + id + ']');
      $('#select3').html(options).show();
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <select name="select1" id="select1">
        <option value="">Select Country</option>
        <option value="india">India</option>
        <option value="america">America</option>
    </select>
    
    
    <select name="select2" id="select2" style="display: none;">
        <option value="">Select State</option>
        <option data-value="india" value="orissa">Orissa</option>
        <option data-value="india" value="telangan">Telangan</option>
        <option data-value="america" value="america">USA</option>
        <option data-value="america" value="america">California</option>
    </select>
    
    <select name="select3" id="select3" style="display: none;">
        <option value="">Select city</option>
        <option data-value="orissa">Nal</option>
        <option data-value="orissa">Mir</option>
        <option data-value="telangan">Hyd</option>
        <option data-value="telangan">Vija</option>
        <option data-value="america">KRK</option>
        <option data-value="america">MRK</option>
    </select>

    【讨论】:

    • 感谢它工作正常。但我想做的很小。第三个选择选项不应该显示,直到第一个,第二个被选中。
    • 您可以根据需要通过 CSS 或 JS 隐藏/显示相应的选择。我已经修改了由 JS 执行的代码。看看吧。
    猜你喜欢
    • 2012-05-21
    • 2023-04-02
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 2017-12-17
    相关资源
    最近更新 更多