#javascript #html #arrays #for-loop #textbox
#javascript #HTML #массивы #for-цикл #текстовое поле
Вопрос:
У меня есть функция, которая генерирует текстовые поля из цикла for
var txtBox = "<input type='text' id='txtNum[]' />"
for(var i = 0; i<=names.length;i )//retrieve names from the array
{
html = "<tr id='row" i "'><td style='border:1px solid black;'>" names[i] "</td>";
for(var j=1;j<=2;j )//amount of textboxes need to be created
{
html = "<td style='border:1px solid black;'>" txtBox "</td>";
}
for(var k=1;k<=1;k )//amount of textboxes need to be created
{
html = "<td style='border:1px solid black;'>" txtBox "</td>";
}
html = "</tr>";
}
этот цикл for сгенерирует 3 текстовых поля подряд с одинаковым идентификатором, если длина имен не будет соблюдена, но моя проблема в том, что я хочу вычислить, скажем, сложение тех значений, которые будут введены в текстовые поля, но не удается найти способ сделать это. Я искал в Интернете примеры, но почти все они показывают текстовые поля с другим вычисляемым идентификатором, ни один из которых я не видел с идентификатором в виде массива.
Я ограничен только javascript и html.
Есть идеи о том, как этого можно достичь??
Заранее спасибо..
Комментарии:
1. Вы не можете повторно использовать идентификаторы
2. есть предложения о том, что я могу использовать для достижения того, чего я хочу??
3. вместо этого используйте имя класса. Попытка повторного использования идентификаторов — безусловно, самый распространенный вопрос JS здесь, поэтому было бы полезно провести небольшое исследование, прежде чем задавать его.
Ответ №1:
Первый. Идентификаторы — это идентификаторы. Не может быть другого пользователя с таким же идентификатором, как у вас, поэтому не должно быть двух элементов с одинаковыми идентификаторами. Вместо этого используйте class. Классы HTML
Для вашей проблемы. Когда вы измените его на class, вы можете использовать
let arr = document.querySelectorAll(".CLASS_NAME")
или
let arr = document.getElementsByClassName('CLASS_NAME')
чтобы получить массив всех полей ввода, а затем просто
arr.ForEach((e)=>{
/*FUNCTION BODY HERE. HERE WILL BE ADDITION*/
let valueOfOneOfThem = parseInt(e.value) || 0;
sumOfAll = valueOfOneOfThem;
});
Комментарии:
1. можете ли вы дать мне полные коды для того, что вы предложили, потому что я пробовал, но результат получается неопределенным и nan..
2. Привет. Я добавил jsFiddle для вас. Рабочая версия. Посмотрите на это. Я все прокомментировал для вас. 🙂