Не могу получить значение ввода

У меня есть функция, в которой я создаю ввод, например

tr = document.createElement("tr");
td1 = document.createElement("td");
td2 = document.createElement("td");
td1.appendChild(document.createTextNode("Number:"));
td2.appendChild(document.createElement("input"));
td2.setAttribute("id", "nr");
tr.appendChild(td1);
tr.appendChild(td2);
table.appendChild(tr);

После этого я хочу получить его значение в другой функции с помощью:

var nr = document.getElementById("nr").value;

он будет знать элемент nr, но значение равно undefined

Потому что элементы td не имеют значения. Вам нужно значение input, а не td.

takendarkk 28.05.2019 20:55

упс я тупой спасибо

Graf 28.05.2019 20:58
Поведение ключевого слова "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) для оценки ваших знаний,...
1
2
56
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Эта строка устанавливает идентификатор <td>, а не добавленного дочернего элемента ввода:

td2.setAttribute("id", "nr");
Ответ принят как подходящий

Как сказал @takendarkk, тег <td> не имеет атрибута value.

В своем коде определите в другой переменной создание ввода, чтобы вы могли позже указать идентификатор для реферера, например:

let tr = document.createElement("tr");
let td1 = document.createElement("td");
let td2 = document.createElement("td");
let input = document.createElement("input"); // Created input
input.setAttribute("id","nr"); // Given an id
td1.appendChild(document.createTextNode("Number:"));
td2.appendChild(input); // Appended the input element previously created
tr.appendChild(td1);
tr.appendChild(td2);
table.appendChild(tr);

As @AlexeyZelenin suggested, you should use let or var on variable definitions to prevent modifying another variable outside the current scope.

Посмотрите на пример:

Нажмите кнопку, чтобы получить значение ввода.

const table = document.querySelector("table");

function createRow() {
  let tr = document.createElement("tr");
  let td1 = document.createElement("td");
  let td2 = document.createElement("td");
  let input = document.createElement("input");
  input.setAttribute("id","nr");
  td1.appendChild(document.createTextNode("Number:"));
  td2.appendChild(input);
  tr.appendChild(td1);
  tr.appendChild(td2);
  table.appendChild(tr);
}

createRow();

function showValue(){
  console.info(document.getElementById("nr").value);
}
<table></table><button onclick = "showValue()">Show value</button>

Я бы предложил использовать let или const для каждого объявления переменной, чтобы они не повлияли на что-то выходящее за рамки.

Alexey Zelenin 28.05.2019 21:05

@AlexeyZelenin совершенно точно. Отредактировано. Думаю, я просто немного отвлекся на это. Спасибо!

k3llydev 28.05.2019 21:09

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