Как получить входные данные из динамически созданного элемента html с помощью javascript

У меня есть динамически созданный набор полей с формой и 6 входами для имени, контакта и т. д. Я хочу получить данные из этих полей ввода, используя что-то вроде:

document.getElementsByClassName("input-field")[0].id.value;

но независимо от того, какой метод доступа к элементам я использую (ById, ByTagName и т. д.), я всегда получаю ошибку, не могу получить значение undefined. Почему это не определено, когда у меня есть 6 полей ввода с одинаковым именем класса и как я могу получить доступ к значению? Гуглил целую вечность и не мог найти ничего, что помогло бы.

РЕДАКТИРОВАТЬ

вот мой код

// get body tag
var mainBody = document.getElementsByTagName("body");

// create array of input labels
var inputNameValues = ["first-name", "last-name", "title", "health-num", "email", "telephone"];
var inputLabels = ["First Name", "Last Lame", "Title", "Health Authority Number", "Email", "Telephone (Optional)"];

// create the contact form
var contactPageDiv = document.createElement("div");
contactPageDiv.setAttribute("id", "form-cointainer");
var fieldSet = document.createElement("fieldset");
fieldSet.setAttribute("id", "contact-form")
var form = document.createElement("form");
form.setAttribute("onsubmit", validateForm());
fieldSet.appendChild(form);
// create labels and input fields
for (let i = 0; i < inputLabels.length; i++) {
  var label = document.createElement("label");
  var bold = document.createElement("b");
  var inputText = document.createTextNode(inputLabels[i]);
  bold.appendChild(inputText);
  label.appendChild(bold);
  form.appendChild(document.createElement("br"));
  var input = document.createElement("input");
  input.setAttribute("class", "input-field");
  input.setAttribute("type", "text");
  input.setAttribute("id", inputNameValues[i]);

  // setup placeholder text, focus and required fields
  input.setAttribute("placeholder", inputLabels[i]);
  if (inputNameValues[i] === "first-name") {
    input.setAttribute("autofocus", "true");
  }
  if (inputNameValues[i] !== "telephone") {
    input.setAttribute("required", "true");
  }

  // add tool tip icon
  if (inputNameValues[i] === "health-num") {
    // create the img
    var img = document.createElement("img");
    img.setAttribute("id", "question-mark");
    img.setAttribute("src", "resources/questionmark.jpg");
    img.setAttribute("alt", "question mark symbol");

    // create the tool tip text box
    var textBox = document.createElement("div");
    textBox.setAttribute("id", "tool-tip-text-box");
    var paragraph = document.createElement("p");
    textBox.appendChild(paragraph);
    var text = document.createTextNode("If you do not know your ZHA number, please contact your GP");
    paragraph.appendChild(text);
    label.appendChild(textBox);
    img.onmouseover = function() {
      textBox.style.display = "block";
    }
    img.onmouseout = function() {
      textBox.style.display = "none";
    }
    label.appendChild(img);
  }
  form.appendChild(label);
  form.appendChild(input);
}
// create submit button
var submitBtn = document.createElement("input");
submitBtn.setAttribute("id", "submit-btn");
submitBtn.setAttribute("type", "submit");
submitBtn.setAttribute("value", "Submit!");
form.appendChild(submitBtn);
contactPageDiv.appendChild(fieldSet);

// display the form on the page
mainBody[0].appendChild(contactPageDiv);

function validateForm() {

  console.info(document.getElementsByClassName("input-field")[0].value);

}

Опубликуйте минимальный воспроизводимый пример с помощью редактора фрагментов.

mplungjan 06.03.2019 09:16

Что вы подразумеваете под id и [0] будет доступ только к ПЕРВОМУ элементу

mplungjan 06.03.2019 09:17

Зачем использовать id..... попробуйте document.getElementsByClassName("input-field")[0].value;

Mamun 06.03.2019 09:18

Когда вы хотите значение? Возможно, вы пытаетесь получить значение до того, как элементы станут доступны.

Ciprian 06.03.2019 09:19

document.getElementsByClassName("поле ввода")[0].value; все еще говорит неопределенное. Я определенно уже создал элементы и использую [0] в качестве примера, потому что знаю, сколько существует элементов, и я хочу явно ссылаться на них.

PumpkinBreath 06.03.2019 09:27

Удалите () из form.setAttribute("onsubmit", validateForm()); - он выполняется немедленно

mplungjan 06.03.2019 09:37

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

PumpkinBreath 06.03.2019 09:39
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
7
37
1

Ответы 1

Это проблема X/Y

Удалите () из form.setAttribute("onsubmit", validateForm());

Он выполняется непосредственно перед существованием полей

Также используйте прослушиватель событий

form.addEventListener("submit", validateForm);

И я рекомендую querySelector

function validateForm(e) {
  e.preventDefault(); // remove when you have tested

 // takes the first - use querySelectorAll to get the rest
  console.info(document.querySelector(".input-field").value); 
}

// get body tag
var mainBody = document.getElementsByTagName("body");

// create array of input labels
var inputNameValues = ["first-name", "last-name", "title", "health-num", "email", "telephone"];
var inputLabels = ["First Name", "Last Lame", "Title", "Health Authority Number", "Email", "Telephone (Optional)"];

// create the contact form
var contactPageDiv = document.createElement("div");
contactPageDiv.setAttribute("id", "form-cointainer");
var fieldSet = document.createElement("fieldset");
fieldSet.setAttribute("id", "contact-form")
var form = document.createElement("form");
form.addEventListener("submit", validateForm);
fieldSet.appendChild(form);
// create labels and input fields
for (let i = 0; i < inputLabels.length; i++) {
  var label = document.createElement("label");
  var bold = document.createElement("b");
  var inputText = document.createTextNode(inputLabels[i]);
  bold.appendChild(inputText);
  label.appendChild(bold);
  form.appendChild(document.createElement("br"));
  var input = document.createElement("input");
  input.setAttribute("class", "input-field");
  input.setAttribute("type", "text");
  input.setAttribute("id", inputNameValues[i]);

  // setup placeholder text, focus and required fields
  input.setAttribute("placeholder", inputLabels[i]);
  if (inputNameValues[i] === "first-name") {
    input.setAttribute("autofocus", "true");
  }
  if (inputNameValues[i] !== "telephone") {
    input.setAttribute("required", "true");
  }

  // add tool tip icon
  if (inputNameValues[i] === "health-num") {
    // create the img
    var img = document.createElement("img");
    img.setAttribute("id", "question-mark");
    img.setAttribute("src", "resources/questionmark.jpg");
    img.setAttribute("alt", "question mark symbol");

    // create the tool tip text box
    var textBox = document.createElement("div");
    textBox.setAttribute("id", "tool-tip-text-box");
    var paragraph = document.createElement("p");
    textBox.appendChild(paragraph);
    var text = document.createTextNode("If you do not know your ZHA number, please contact your GP");
    paragraph.appendChild(text);
    label.appendChild(textBox);
    img.onmouseover = function() {
      textBox.style.display = "block";
    }
    img.onmouseout = function() {
      textBox.style.display = "none";
    }
    label.appendChild(img);
  }
  form.appendChild(label);
  form.appendChild(input);
}
// create submit button
var submitBtn = document.createElement("input");
submitBtn.setAttribute("id", "submit-btn");
submitBtn.setAttribute("type", "submit");
submitBtn.setAttribute("value", "Submit!");
form.appendChild(submitBtn);
contactPageDiv.appendChild(fieldSet);

// display the form on the page
mainBody[0].appendChild(contactPageDiv);

Спасибо, да, ошибка исчезла, но теперь ничего не выводится на консоль при отправке, даже простое тестовое сообщение.

PumpkinBreath 06.03.2019 09:43

Другие вопросы по теме