Uue ostu lisamine toodete kalkulaatoris
Alustuseks teeme nii, et nupu vajutamisel lisatakse tabelisse uus rida ostuga:
add.addEventListener('click', function() {
let tr = document.createElement('tr');
let td;
td = document.createElement('td');
td.textContent = name.value;
td.classList.add('name');
tr.appendChild(td);
td = document.createElement('td');
td.textContent = price.value;
td.classList.add('price');
tr.appendChild(td);
td = document.createElement('td');
td.textContent = amount.value;
td.classList.add('amount');
tr.appendChild(td);
td = document.createElement('td');
td.textContent = price.value * amount.value;
td.classList.add('cost');
tr.appendChild(td);
td = document.createElement('td');
td.textContent = 'kustuta';
td.classList.add('remove');
tr.appendChild(td);
table.appendChild(tr);
});
Minu poolt toodud lahendusel on aga ilmsed probleemid koodi dubleerimisega: tegelikult kirjutame iga lahtri jaoks sama koodi.
Oleks asjakohast omada mõnda funktsiooni tabeli lahtri loomiseks. Olgu selle funktsiooni esimene parameeter viide tabeli reale, teine parameeter - tabeli lahtri tekst, ja kolmas - lahtri CSS klassi nimi:
function createCell(tr, value, name) {
}
Olles sellise funktsiooni, saaksime ülaltoodud koodi ümber kirjutada järgmiselt:
add.addEventListener('click', function() {
let tr = document.createElement('tr');
createCell(tr, name.value, 'name');
createCell(tr, price.value, 'price');
createCell(tr, amount.value, 'amount');
createCell(tr, price.value * amount.value, 'cost');
createCell(tr, 'kustuta', 'remove');
table.appendChild(tr);
});
Rakendage minu poolt kirjeldatud funktsioon createCell.
Kopeerige minu kood uue ostu lisamiseks. Testige uue ostu lisamist tabelisse.
Modifitseerige funktsiooni createCell nii,
et see tagastab return-iga
loomise tulemusel saadud tabeli lahtri.