Не могу получить значение элемента - PullRequest
0 голосов
/ 22 июня 2019

Я пытаюсь получить значение элемента ввода. Элемент находится в модальном режиме, а модальные данные заполняются различными значениями в зависимости от кнопки, которую я нажимаю, чтобы открыть модальное окно.

var modalBody = document.getElementsByClassName("modal-body");
for(var i = 0; i < modalbody.length; i++) {
    var mac = modalBody.item(i).getElementsByTagName('div')[2].getElementById("mac-name").value;
    alert(mac);
}

ошибка: ошибка типа: modalBody.item (...). getElementsByTagName (...) [2] .getElementById не является функция

Я также пытался с document.getElementById("mac-name").value;, но это возвращает пусто

<form method="post">
    <div class="modal-body">
        <div class="form-group">
            <label for="station-name" class="col-form-label">ID:</label>
            <input class="form-control" id="station-id" name="edit--id" required="" type="text" hidden="">
            <input class="form-control" id="station-name" name="edit--name" required="" type="text">
        </div>
        <div class="form-group">
            <label for="profile-name" class="col-form-label">Profile:</label>
            <select type="text" class="form-control" id="profile-name" name="edit-profile" required="">
            <option>name1</option>
            <option>name2</option>
            </select>
        </div>
        <div class="form-group">
            <label for="mac-name" class="col-form-label">MAC Address:</label>
            <input class="form-control" id="mac-name" name="edit-mac" required="" type="text">
        </div>
    </div>
</form>

1 Ответ

2 голосов
/ 22 июня 2019

Вместо использования getElementsByClassName и последующего запуска следующего для каждого элемента:

var mac = modalBody.item(i).getElementsByTagName('div')[2].getElementById("mac-name").value;

Вместо этого можно использовать querySelectorAll и передать .modal-body div #mac-name.Это выберет все элементы с идентификатором mac-name внутри div внутри элемента с классом modal-body.Вы можете использовать результаты этого, чтобы затем зациклить каждый элемент и получить каждое значение:

var macs = document.querySelectorAll('.modal-body div #mac-name');

См. Пример ниже:

var macs = document.querySelectorAll('.modal-body div #mac-name');
for (var i = 0; i <  macs.length; i++) {
  var mac = macs[i].value;
  console.log(mac);
}
<form method="post">
  <div class="modal-body">
    <div class="form-group">
      <label for="station-name" class="col-form-label">ID:</label>
      <input class="form-control" id="station-id1" name="edit--id" required="" type="text" hidden="">
      <input class="form-control" id="station-name1" name="edit--name" required="" type="text">
    </div>
    <div class="form-group">
      <label for="profile-name" class="col-form-label">Profile:</label>
      <select type="text" class="form-control" id="profile-name1" name="edit-profile" required="">
        <option>name1</option>
        <option>name2</option>
      </select>
    </div>
    <div class="form-group">
      <label for="mac-name" class="col-form-label">MAC Address:</label>
      <input class="form-control" id="mac-name" name="edit-mac" value="Addr 1" required="" type="text">
    </div>
  </div>
  
  <div class="modal-body">
    <div class="form-group">
      <label for="station-name" class="col-form-label">ID:</label>
      <input class="form-control" id="station-id2" name="edit--id" required="" type="text" hidden="">
      <input class="form-control" id="station-name2" name="edit--name" required="" type="text">
    </div>
    <div class="form-group">
      <label for="profile-name" class="col-form-label">Profile:</label>
      <select type="text" class="form-control" id="profile-name2" name="edit-profile" required="">
        <option>name1</option>
        <option>name2</option>
      </select>
    </div>
    <div class="form-group">
      <label for="mac-name" class="col-form-label">MAC Address:</label>
      <input class="form-control" id="mac-name" name="edit-mac" value="Addr 2" required="" type="text">
    </div>
  </div>
</form>
...