#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 я думаю, что я собираюсь присвоить им имена классов, поскольку эти входные данные будут принимать только строки, а другой набор входных данных будет принимать только числа,