У меня есть функция, в которой я создаю ввод, например
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>
, а не добавленного дочернего элемента ввода:
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
orvar
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
для каждого объявления переменной, чтобы они не повлияли на что-то выходящее за рамки.
@AlexeyZelenin совершенно точно. Отредактировано. Думаю, я просто немного отвлекся на это. Спасибо!
Потому что элементы
td
не имеют значения. Вам нужно значениеinput
, а неtd
.