Как перебирать динамически генерируемые поля ввода?

#javascript #for-loop #local-storage #addeventlistener

#javascript #for-цикл #локальное хранилище #addeventlistener добавить eventlistener

Вопрос:

Я динамически генерирую некоторые поля ввода на своей странице, и я хочу получить из них входные данные для сохранения в localStorage, если этот способ работает, если нет? предложите обходной путь, как это можно сделать? кроме того, как я могу добавить прослушиватель событий к кнопке отправки? ниже приведен код, взгляните на него и дайте несколько предложений / импровизаций.

..

 HTML
<div id="warnMessage"></div>
<div class="add"></div>
<div class="inputs">
        <input
          type="text"
          maxlength="1"
          id="inputValue"
        />
        <button class="btn" type="button"> </button>
      </div>

javascript

const div = document.querySelector(".add");


const add = document
  .querySelector(".btn")
  .addEventListener("click", addingInps);

function addingInps() {
  const inputValue = parseInt(document.getElementById("inputValue").value);

  if (isNaN(inputValue)) {
    document.getElementById("warnMessage").innerText = "Enter Again";
    document.getElementById("inputValue").value = "";
  } else {
    const form = document.createElement("form");
    form.method = "post";
    form.action = "#";

    for (let i = 0; i < inputValue; i  ) {

      const inp = document.createElement("input");
      inp.type = "text";
      inp.maxLength = "12";
      inp.required = true;
      inp.className = "inp";

      const br = document.createElement("br");

      
      form.appendChild(br.cloneNode());
      form.appendChild(inp);
      form.appendChild(br.cloneNode());

      div.appendChild(form);
      document.querySelector("#inputValue").style.display = "none";
    }

    const sub = document.createElement("button");
    sub.className = "subButton";
    sub.type = "button";
    sub.value = "button";
    sub.textContent = "Submit"
    form.appendChild(sub);

  }
}
 

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

1. Назначьте класс динамическим <input> узлам (с .classList.add() помощью) и запрашивайте их, когда это необходимо Document.getElementsByClassName() .

Ответ №1:

Вы проходите через ввод…не массив или список узлов. Это не может работать

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

1. как заставить это работать? поскольку я хочу получать от них входные данные.

Ответ №2:

Я думаю, было бы проще, если бы вы добавляли идентификатор к каждому новому созданному вами полю ввода

 for(let i=0;i < inputValue;i  ){
   // create your element ipt
   ipt.setAttribute("id","autogenerated_"   i);
}
 

и получать значение на основе идентификатора

 document.getElementById("autogenerated_x").value();
 

что касается настройки прослушивателя событий, я не могу думать ни о каком другом классическом способе

 btn.addEventListener("click", function(e){
    // your functionality
});
 

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

1. спасибо, это сработало, теперь я должен извлекать из них значения, как я могу это сделать, работает ли цикл над ними?

2. @prph8: На самом деле, наличие таких автоматически сгенерированных идентификаторов вообще не имеет никакого смысла. Пока вы обрабатываете эти входные данные как единое целое, использование class атрибута в качестве отдельной функции (как я предложил в своем первоначальном комментарии) имеет больше смысла. Итак, как только вам понадобятся значения этих элементов, вы просто делаете const dynamicInputValues = [...document.getElementsByClassName(/* common class name */)].map(({value}) => value)

3. Да, вы зацикливаетесь так же, как вы их создали. Я думаю, вы собираетесь сделать это в своей функции EventListener

4. @evgengorbunkov Единственная причина, по которой я рекомендую Ids, заключается в том, что в форме вам иногда нужно анализировать входные данные по-разному. два ввода могут быть строками, а третий может быть числом. В этом случае вам нужно знать, на какое поле ввода вы ссылаетесь

5. @PanosSavvaidis я думаю, что я собираюсь присвоить им имена классов, поскольку эти входные данные будут принимать только строки, а другой набор входных данных будет принимать только числа,