Автонумерация строк в таблице HTML
Пытаюсь создать простую автонумерацию строк для таблицы. Я создаю переменную = 1, и пытаюсь сказать компьютеру что когда я добавляю новою строчку то переменная = переменная + 1, и оно себе приписывает ее мне в первый столбик. Но у меня получается что все строчки имеют номер 1, может кто то подскажет в чем проблема? Заранее спасибо!
document.getElementById("myBtn").onclick = dodajWiersz;
function dodajWiersz() {
var lp = 1;
var wiersz = document.createElement("tr");
var liczba = document.createElement("td");
//var val1 = document.getElementById("liczba").value;
//liczba.innerHTML = val1;
liczba.innerHTML = lp;
var imie = document.createElement("td");
var val2 = document.getElementById("imie").value;
imie.innerHTML = val2;
var nazwisko = document.createElement("td");
var val3 = document.getElementById("nazwisko").value;
nazwisko.innerHTML = val3;
var email = document.createElement("td");
var val4 = document.getElementById("email").value;
email.innerHTML = val4;
var wiek = document.createElement("td");
var val5 = document.getElementById("wiek").value;
wiek.innerHTML = val5;
var data = document.createElement("td");
var val6 = document.getElementById("data").value;
data.innerHTML = val6;
var plec = document.createElement("td");
var val7 = document.querySelector('input[name="gender"]:checked').value;
plec.innerHTML = val7;
var grupa = document.createElement("td");
var val8 = document.getElementById("grupa").value;
grupa.innerHTML = val8;
wiersz.appendChild(liczba);
wiersz.appendChild(imie);
wiersz.appendChild(nazwisko);
wiersz.appendChild(email);
wiersz.appendChild(wiek);
wiersz.appendChild(data);
wiersz.appendChild(plec);
wiersz.appendChild(grupa);
var dodac = document.getElementById("tbd");
if (dodac.appendChild(wiersz) == true) {
lp = lp + 1;
};
}
<table id="customersKontakty">
<thead>
<tr>
<th>Liczba porządkowa</th>
<th>Imię</th>
<th>Nazwisko</th>
<th>Email</th>
<th>Wiek</th>
<th>Data urodzenia</th>
<th>Płeć</th>
<th>Grupa</th>
</tr>
</thead>
<tbody id="tbd">
</tbody>
</table>
<element class="plabel">
<br><br><br>
<p class="plabell">Liczba porządkowa:<p><input type="number" id="liczba"></p></p>
<p class="plabell">Imię:<p><input type="text" id="imie"></p></p>
<p class="plabell">Nazwisko:<p><input type="text" id="nazwisko"></p></p>
<p class="plabell">Email:<p><input type="email" id="email"></p></p>
<p class="plabell">Wiek:<p><input type="number" id="wiek"></p></p>
<p class="plabell">Data urodzenia:<p><input type="date" id="data"></p></p>
<p class="plabell">Płeć:
<p>
<input type="radio" name="gender" value="Mężczyzna"> Mężczyzna
<input type="radio" name="gender" value="Kobieta"> Kobieta
</p>
</p>
<p class="plabell">Grupa:
<p>
<select id="grupa">
<option value="Rodzina">Rodzina</option>
<option value="Przyjaciele">Przyjaciele</option>
<option value="Praca">Praca</option>
<option value="Znajomi">Znajomi</option>
</select>
</p>
</p>
</element>
<p align="center"><input type="button" value="Dodaj osobę" id="myBtn"></p>
Ответы (1 шт):
1: var lp = 1; объявляется новая переменная при каждом вызове функции, нужно вынести его из функции, чтобы значение хранилось между вызовами.
2: if (dodac.appendChild(wiersz) == true) lp = lp + 1; вызов dodac.appendChild(wiersz) возвращает добавленный узел, т.е. wiersz. А сравнение <HTML-node> == true всегда дает false, потому что операция пытается превратить оба операнда в число, NaN == 1 → false.
Доказательство:
console.log( document.body == true ); // false
document.body.valueOf = function() {
console.log('xD');
return 1;
};
console.log( document.body == true ); // true
3: Если пишете код, требующий ввода данных, подготовьте значения по умолчанию, чтобы во время написания кода постоянно не вводить то же самое...
document.querySelectorAll('input').forEach(e => e.value = '11');
// Временно, для удобного тестирования.
document.getElementById("myBtn").onclick = dodajWiersz;
var lp = 1;
function dodajWiersz() {
var wiersz = document.createElement("tr");
var liczba = document.createElement("td");
//var val1 = document.getElementById("liczba").value;
//liczba.innerHTML = val1;
liczba.innerHTML = lp;
var imie = document.createElement("td");
var val2 = document.getElementById("imie").value;
imie.innerHTML = val2;
var nazwisko = document.createElement("td");
var val3 = document.getElementById("nazwisko").value;
nazwisko.innerHTML = val3;
var email = document.createElement("td");
var val4 = document.getElementById("email").value;
email.innerHTML = val4;
var wiek = document.createElement("td");
var val5 = document.getElementById("wiek").value;
wiek.innerHTML = val5;
var data = document.createElement("td");
var val6 = document.getElementById("data").value;
data.innerHTML = val6;
var plec = document.createElement("td");
var val7 = document.querySelector('input[name="gender"]:checked').value;
plec.innerHTML = val7;
var grupa = document.createElement("td");
var val8 = document.getElementById("grupa").value;
grupa.innerHTML = val8;
wiersz.appendChild(liczba);
wiersz.appendChild(imie);
wiersz.appendChild(nazwisko);
wiersz.appendChild(email);
wiersz.appendChild(wiek);
wiersz.appendChild(data);
wiersz.appendChild(plec);
wiersz.appendChild(grupa);
var dodac = document.getElementById("tbd");
dodac.appendChild(wiersz);
lp = lp + 1;
}
<table id="customersKontakty">
<thead>
<tr>
<th>Liczba porządkowa</th>
<th>Imię</th>
<th>Nazwisko</th>
<th>Email</th>
<th>Wiek</th>
<th>Data urodzenia</th>
<th>Płeć</th>
<th>Grupa</th>
</tr>
</thead>
<tbody id="tbd">
</tbody>
</table>
<element class="plabel">
<br><br><br>
<p class="plabell">Liczba porządkowa:
<p><input type="number" id="liczba"></p>
</p>
<p class="plabell">Imię:
<p><input type="text" id="imie"></p>
</p>
<p class="plabell">Nazwisko:
<p><input type="text" id="nazwisko"></p>
</p>
<p class="plabell">Email:
<p><input type="email" id="email"></p>
</p>
<p class="plabell">Wiek:
<p><input type="number" id="wiek"></p>
</p>
<p class="plabell">Data urodzenia:
<p><input type="date" id="data"></p>
</p>
<p class="plabell">Płeć:
<p>
<input checked type="radio" name="gender" value="Mężczyzna"> Mężczyzna
<input type="radio" name="gender" value="Kobieta"> Kobieta
</p>
</p>
<p class="plabell">Grupa:
<p>
<select id="grupa">
<option value="Rodzina">Rodzina</option>
<option value="Przyjaciele">Przyjaciele</option>
<option value="Praca">Praca</option>
<option value="Znajomi">Znajomi</option>
</select>
</p>
</p>
</element>
<p align="center"><input type="button" value="Dodaj osobę" id="myBtn"></p>
4: Придется всё пересчитывать при удалении строк. Можно написать более удобную функцию на JS, но существует решение на CSS-counter(), значительно проще:
td {
width: 100px;
height: 20px;
border: 1px solid #999;
}
table {
border: 2px solid orange;
counter-reset: bubu;
}
td:nth-child(1) {
counter-increment: bubu;
}
td:nth-child(1)::before {
content: counter(bubu) '.';
}
<table>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
</table>
<table>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
</table>
При изменении количества строк, автоматчески пересчитает.