Autor | Zpráva | ||
---|---|---|---|
pajadvorak Profil |
#1 · Zasláno: 25. 9. 2016, 08:41:21
Ahoj, mám kód (viz níže), který mi sčítá počet označených checkboxů v tabulce. Funguje, jedinou vadu na kráse má v tom, že mi to nefunguje, když je tam 1 řádek.
Chápu, že podmínka for (var i=0; i<Count; i++) to nedovolí. Ale při změně na i<=Count to přestane fungovat.
Kdo si s tím ví rady? Moc děkuji. function pocet(form) { // Celkový počet CheckBoxů Count = form.elements['oznacit_faktury[]'].length; // Počet zaškrtnutých položek CheckedCount = 0; CheckedKcs = 0; alert (Count); // Zjištění počtu zaškrtnutých položek for (var i=0; i<Count; i++){ if (form.elements['oznacit_faktury[]'][i].checked) CheckedCount++; if (form.elements['oznacit_faktury[]'][i].checked) { kcs = form.elements['kcs[]'][i].value; CheckedKcs = parseFloat(CheckedKcs) + parseFloat(kcs); } } document.getElementById("kcs_checkbox").value = CheckedKcs; document.getElementById("pocet_checkbox").value = CheckedCount; } |
||
Radek9 Profil |
#2 · Zasláno: 25. 9. 2016, 10:59:36
pajadvorak:
„Chápu, že podmínka for (var i=0; i<Count; i++) to nedovolí“
Proč by neměla? 0 je přeci menší než 1, takže projde. Prosím o odkaz na živou ukázku. |
||
pajadvorak Profil |
|||
Radek9 Profil |
pajadvorak:
Aha. Netušil jsem, jak přesně se chová ta elements kolekce. Pokud má dané name jen jeden prvek, tak je tam pouze ten prvek a nikoli jednoprvková kolekce. Použij querySelectorAll a bude se to chovat standardně: Živá ukázka
|
||
pajadvorak Profil |
#5 · Zasláno: 25. 9. 2016, 16:32:15
Radek9:
Super, moc děkuji :-) ale bohužel jsem netušil, že se to až tak změní.. tudíž jsem neuvedl i součet ceny, kterou to má zobrazovat... a to původní již není platné... zapsal jsem ji do ukázky "CheckedKcs.......???" Ukázka: Živá ukázka A ještě, je někde návod jak vložit tu živou ukázku jako máš ty? :-) Děkuji |
||
pajadvorak Profil |
#6 · Zasláno: 25. 9. 2016, 21:01:57
Radek9:
Nakonec vyřešeno takto: function pocet(form) { var checkboxes = form.querySelectorAll('[name="oznacit_faktury[]"]'); var kcs = form.querySelectorAll('[name="kcs[]"]'); var count = checkboxes.length; var checkedCount = 0; var CheckedKcs = 0; for (var i = 0; i < count; i++) { if (checkboxes[i].checked) {checkedCount++;} if (checkboxes[i].checked) { CheckedKcs = parseFloat(CheckedKcs) + parseFloat(kcs[i].value); } } document.getElementById("kcs_checkbox").value = CheckedKcs; document.getElementById("pocet_checkbox").value = checkedCount; } |
||
Radek9 Profil |
#7 · Zasláno: 25. 9. 2016, 21:36:47
pajadvorak:
Doporučoval bych lépe si nastudovat JS. Potom ti tyhle úpravy přijdou triviální. Ještě tam máš pár absurdností. Např. dvakrát kontroluješ checked, stačí jen jednou. parseFloat používej jen na ty stringové hodnoty, ne na součet: for (var i = 0; i < count; i++) { if (checkboxes[i].checked) { checkedCount++; CheckedKcs += parseFloat(kcs[i].value); } } |
||
pajadvorak Profil |
#8 · Zasláno: 25. 9. 2016, 21:44:49
Radek9:
2x kontrola checked - toho jsem si všiml těsně co jsem to sem přidal a hned opravil :-) a to druhé je jasné... já jsem to ani neřešil a použil to původní, co jsem tam měl... :-) Moc děkuji za pomoc. PS: máš nějaký zdroj informace o JS na netu? |
||
Časová prodleva: 7 let
|
0