javascript - 在选择框中选择下一个元素时遇到问题

标签 javascript jquery

选择其他国家/地区时,列表会变为可见。它有效,但是有一个问题。选择另一个县时,必须显示其附属区域的第一项,而不是剩余值。

即当选择 Germany 时,New York 必须变得不可见,而 Dresden 必须变得可见。我一直在尝试这样做几个小时,但没有运气。有什么建议吗?

$(function() {
  $("[name='country']").change(function() {
    // Target option
    var hiddenClass = 'hidden';
    var selected = $(this).find(':selected').data('country-id');

    // Hide all options
    $("[name='region']").find('option') // Find all options
      .addClass(hiddenClass) // Hide them all
      .each(function() {
        // Find current active
        if ($(this).data('country-id') == selected) {
          // Show currently matched against selection
          $(this).removeClass(hiddenClass);
        }
      });
  }).trigger('change');

});
.hidden {
  display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.js"></script>
<script>
</script>

<select name="country">
  <option data-country-id="1">USA</option>
  <option data-country-id="2">Germany</option>
</select>

<select name="region">
  <option data-country-id="1">New York</option>
  <option data-country-id="1">California</option>
  <option data-country-id="1">Carolina</option>
  <option data-country-id="2">Dresden</option>
  <option data-country-id="2">Berlin</option>
</select>

最佳答案

这个问题是因为,尽管某些 option 元素被隐藏了,但从技术上讲,它们在 DOM 中仍然可用以供选择。要解决此问题,您可以根据给定的 country-id 值强制选择更新为第一个可用的 option

另请注意,通过使用 filter() 而不是 each() 循环,您可以使您的逻辑更加简洁。试试这个:

$(function() {
  $("[name='country']").change(function() {
    var hiddenClass = 'hidden';
    var selected = $(this).find(':selected').data('country-id');
    
    $('[name="region"] option').addClass(hiddenClass)
      .filter(`[data-country-id="${selected}"]`).removeClass(hiddenClass)
      .first().prop('selected', true);
  }).trigger('change');
});
.hidden { display: none; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.js"></script>

<select name="country">
  <option data-country-id="1">USA</option>
  <option data-country-id="2" selected="true">Germany</option>
</select>

<select name="region">
  <option data-country-id="1">New York</option>
  <option data-country-id="1">California</option>
  <option data-country-id="1">Carolina</option>
  <option data-country-id="2">Dresden</option>
  <option data-country-id="2">Berlin</option>
</select>

关于javascript - 在选择框中选择下一个元素时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48581485/

相关文章:

javascript - 刷新服务 worker 中使用 importScripts 导入的脚本

javascript - 传单 geojson 样式函数功能仅颜色 1 geojson 功能

javascript - 从 URL 末尾获取整数 - 传递到 RedBean

javascript - 当新数据插入 mysql 时,ajax 通知警报弹出或发出声音

javascript - jQuery 在单击内联 href 时防止 div 的单击行为

javascript - 将 css 添加到谷歌地图 v3 多段线?

javascript - 如果第一个 child 有类,如何设置元素的样式?

javascript - AJAX 调用未将数据发送到 Controller 方法

javascript - 基于另一个列值禁用 jqgrid 中的超链接

javascript - 如何在 JavaScript 中迭代时获取当前 JSON 属性的名称?