如何使用 jquery 在 onChange 上保持多个 select 同步

How to keep multiple select in sync onChange using jquery

我正在想办法让两个或多个 select 保持同步。我实际上创建了几个 select 元素(我不确定这是否是最准确的方法,如果有人告诉我还有其他方法,我将不胜感激)。

如果我在第一个里selectNorth America,只有select和id="north"会自动显示,其他的会保持隐藏状态,如果我改成Central America,其余的也会改变,只显示 select 和 id="central",其余隐藏。

这是我目前得到的:

<select id="continent">
    <option value="1">North America</option>
    <option value="2">Central America</option>
    <option value="3">South America</option>
</select>

<select id="north">
    <option value="1">Canada</option>
    <option value="2">USA</option>
    <option value="3">Mexico</option>
</select>

<select id="central">
    <option value="1">Guatemala</option>
    <option value="2">Costa Rica</option>
    <option value="3">Nicaragua</option>
</select>

<select id="south">
    <option value="1">Brazil</option>
    <option value="2">Argentina</option>
    <option value="3">Chile</option>
</select>

到目前为止,我只需要同步两个具有相同值的 select:

$("#continent").change(function(){
    $("#north").val($("#continent").val())
});

然而,这远远不是我需要的。谁能帮我找出正确的方法?

提前致谢!

如果您不介意使用一些不同的 ID,您可以这样做:

首先更改其他选择的id。

<select id="continent">
    <option value="1">North America</option>
    <option value="2">Central America</option>
    <option value="3">South America</option>
</select>

<select id="group-1" class="country-group">
    <option value="1">Canada</option>
    <option value="2">USA</option>
    <option value="3">Mexico</option>
</select>

<select id="group-2" class="country-group">
    <option value="1">Guatemala</option>
    <option value="2">Costa Rica</option>
    <option value="3">Nicaragua</option>
</select>

<select id="group-3" class="country-group">
    <option value="1">Brazil</option>
    <option value="2">Argentina</option>
    <option value="3">Chile</option>
</select>

然后隐藏所有选择,只显示与您想要的大陆相关的选项。

$("#continent").change(function(){
  $(".country-group").val()).hide();
  $("#group-"+$("#continent").val()).show();
});

作为替代方案,如果您真的不需要所有内容都在不同的选择中,您可以使用 Option Groups 之类的东西。根据 w3schools,所有浏览器都支持它。

<select>
  <optgroup label="North America">
    <option value="1">Canada</option>
    <option value="2">USA</option>
    <option value="3">Mexico</option>
  </optgroup>
  <optgroup label="Central America">
    <option value="1">Guatemala</option>
    <option value="2">Costa Rica</option>
    <option value="3">Nicaragua</option>
  </optgroup>
  <optgroup label="South America">
    <option value="1">Brazil</option>
    <option value="2">Argentina</option>
    <option value="3">Chile</option>
  </optgroup>
</select>

或者,如果您想使用添加额外功能的 prettier/handier JS 库,您可以查看 Select2, Chosen or Selectize's Option Groups

首先,您需要 select selected 选项的文本,并获取它的第一部分,即其他 selectid。然后隐藏 select 的所有兄弟姐妹并显示 select 具有特定的 id.

$("#continent").change(function(){
    var id = $(this).find("option:selected").text().split(" ")[0].toLowerCase();
    $(this).siblings().hide().siblings("#"+id).show();
}).siblings().hide();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="continent">
    <option value="">Select one</option>
    <option value="1">North America</option>
    <option value="2">Central America</option>
    <option value="3">South America</option>
</select>
<select id="north">
    <option value="1">Canada</option>
    <option value="2">USA</option>
    <option value="3">Mexico</option>
</select>
<select id="central">
    <option value="1">Guatemala</option>
    <option value="2">Costa Rica</option>
    <option value="3">Nicaragua</option>
</select>
<select id="south">
    <option value="1">Brazil</option>
    <option value="2">Argentina</option>
    <option value="3">Chile</option>
</select>