Значение DataList получено из JavaScript, возвращая неопределенное

Я создаю на своей веб-странице список данных, который получает его значения из массива JavaScript (который получает данные из массива Java с использованием JSP).

Вот мой код для заполнения списка данных:

<input name="Engineer Name" list="engineer" />
<datalist id="engineer"></datalist>
<script>
  //Take the engineers array and transfer to javascript array
  //This is so we can source the Engineer Drop-Down menu from a file dynamically
  var engineerArray = [];
  <% for (int i=0; i<engineers.size(); i++) { %>
  engineerArray[<%= i %>] = "<%= engineers.get(i) %>";
  <% } %>

  for (var i in engineerArray) {
    var datalist = document.getElementById('engineer');
    datalist.innerHTML += '<option value=' + engineerArray[i] + '>';
  }
</script>

Этот код правильно отображает список данных, но при отправке формы я вызываю другую функцию JavaScript, которая содержит строку:

var engineer = document.getElementById('engineer').value;

И это значение в конечном итоге undefined,

1 ответ

Решение

Вы пытаетесь получить значение datalist неправильно. Селектор должен быть на input элемент. Я изменил код для справки:

<input name="Engineer Name" id="engineerList" list="engineer" />
<datalist id="engineer"></datalist>
<script>
  //Take the engineers array and transfer to javascript array
  //This is so we can source the Engineer Drop-Down menu from a file dynamically
  var engineerArray = [];
  <% for (int i=0; i<engineers.size(); i++) { %>
  engineerArray[<%= i %>] = "<%= engineers.get(i) %>";
  <% } %>

  for (var i in engineerArray) {
    var datalist = document.getElementById('engineer');
    datalist.innerHTML += '<option value=' + engineerArray[i] + '>';
  }
</script>

Затем получите значение списка данных, указав правильный id:

var engineer = document.getElementById('engineerList').value;
Другие вопросы по тегам