Как я могу добавить массив с помощью jQuery?

#javascript #jquery #arrays

#javascript #jquery #массивы

Вопрос:

У меня есть два поля выбора.

 <select id="select-1"><option value="one">one</option><option value="two">two</option></select>
<select id="select-2"></select>
  

Когда я выбираю значение один, он будет добавлять список опций с помощью массива списков

 <script type='text/javascript'>
jQuery(document).ready(function($) {
  $('#select-1').on('change', function() {
    var List = ["test 1", "test 2", "test 3", "test 4"];
    var selectedVal = $(this).children("option:selected").val();
    if(selectedVal == "one") {
      $('#select-2').append('<option>'    List   '</option>');
    }  else {
     //
    }
  })
});
</script>
  

Он загружает список параметров, например

 <option>test 1 test 2 test 3 test 4</option> 
  

но это должно быть

 <option>test 1</option><option>test 2</option><option>test 3</option><option>test 4</option>
  

как я могу это исправить?

Ответ №1:

Одним из способов сделать это кратко было бы использовать map() для создания HTML-строки option элементов из массива, которые вы можете добавить:

 jQuery($ => {
  $('#select-1').on('change', function() {
    let list = ["test 1", "test 2", "test 3", "test 4"];
    if ($(this).val() === "one") {
      let options = list.map(t => `<option>${t}</option>`).join('');
      $('#select-2').append(options);
    } else {
      $('#select-2').empty();
    }
  })
});  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select id="select-1">
  <option value="">Select...</option>
  <option value="one">one</option>
  <option value="two">two</option>
</select>
<select id="select-2"></select>  

Ответ №2:

Вероятно, вам нужен for forEach цикл или:

 if (selectedVal == "one") {
    List.forEach(item => {
        $('#select-2').append('<option>'    item   '</option>');
    }
}
  

Комментарии:

1. Ответ Рори более полный и обеспечит лучшую производительность / масштабируемость. Используйте это вместо