替换 SumoSelect 库中的 select 个选项

Replace select options in SumoSelect Librery

我正在使用数组为我的 selects 实现 SumoSelect 库。例如,我有这个包含汽车品牌的数组

var vehicleBrands=[
      {brand:"Honda"},
      {brand:"toyota"},
      {brand:"hyundai"}
    ]

我正在使用这个数组来填写我的select,例如:

<select class="brands">
   <option>brands here</option>
</select>

然后我在页面加载后填写它:

$(document).ready(function(){
    vehicleBrands.forEach(function(brands, index) {
      $(".brands").append("<option value='"+index+"'>"+ brands.brand+ "</option>" )
    });
})

因为我得到了一些包含车辆模型的其他数组,所以我想做的是:

var toyotaModels=[
      {model:"corolla"},
      {model:"4Runner"},
      {model:"camry"}
    ]

   var hondaModels=[
      {model:"accord"},
      {model:"civic"},
      {model:"Pilot"}
    ]

  var hyundaiModels=[
      {model:"sorento"},
      {model:"sonata"},
      {model:"santa fe"}
    ]

我还有一个 html 标签:

<select class="models"><option>models here</option></select>

一旦我在品牌 selects 上制作了 selection,我需要将模型数组添加到 select 模型中,例如我在 change 事件:

$('#vehicle-brand').change(function(){

    var myOption=$(this).val();
 if(myOption=="Honda"){

     hondaModel.forEach(function(model, index) {

    $('.model')[0].sumo.unload();
    $('.model').SumoSelect();
    $('.model')[0].sumo.add(model.text);//this add options 

});
 }
})

希望您理解这个想法。这有效,但它添加了选项并保存了之前添加的选项。我需要的是,当用户点击 Toyota 时,它会替换 model select 等中的模型车。

每次更改选项时都应应用 $(obj)[0].sumo.reload();。我也优化了你的代码。

检查:

var vehicleBrands=[
  {
    brand:"Honda",
    models:[
      {model:"accord"},
      {model:"civic"},
      {model:"Pilot"}
    ]
  },
  {
    brand:"Toyota",
    models:[
      {model:"corolla"},
      {model:"4Runner"},
      {model:"camry"}
    ]
  },
  {
    brand:"Hyundai",
    models:[
      {model:"sorento"},
      {model:"sonata"},
      {model:"santa fe"}
    ]
  }
]

$(document).ready(function(){
  $('.brands').SumoSelect();
  $('.models').SumoSelect();
  
  vehicleBrands.forEach(function(brands, index) {
    $(".brands").append("<option value='"+index+"'>"+ brands.brand+ "</option>" )
  });
  $('.brands')[0].sumo.reload();
  
  $('.brands').change(function(){
   $(".models").html('');
    var myOption=$(this).val();
    vehicleBrands[myOption].models.forEach(function(model, index) {
      $(".models").append("<option value='"+model.model+"'>"+ model.model+ "</option>" )
    });
   $('.models')[0].sumo.reload();
  })
})
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.sumoselect/3.0.2/jquery.sumoselect.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/jquery.sumoselect/3.0.2/sumoselect.min.css" rel="stylesheet" />

<select class="brands"></select>
<select class="models"></select>