Autor Zpráva
Mánicka
Profil *
Zdravim, potrebujem pomoct s checkboxami

Zde je JS kod:

function countCb(form) {
var total = 0;
var max = form.cbox.length;
for (var idx = 0; idx < max; idx++) {
if (eval("document.reflist.cbox[" + idx + "].checked") == true) {
    total += 1;
   }
}
document.getElementById('cbc').innerHTML = total;
}


Zde je HTML:

<input name="cbox[]" type="checkbox" value="<?=$row['username']?>" onClick="countCb(this.form)">


Tech inputu je vice, proto to jde pres WHILE z databazy. Potrebujem mat v NAME array [] protoze to pak jeste prechadza prez PHP.

Jak to mam pak udelat, aby mi to spocitani checkboxu jelo?

Kdyz ten input name necham bez [] (input name="cbox" ...) tak to jede... ale s tym arrayem mi to nejde a ja ho tam ale potrebujem.

Jak to udelat ?

Diky za kazdu odpoved
Zdar all :)
sysel
Profil
Ale když je jednou name="cbox[]", tak si tam ani HTML ani Javascript žádný index nepřibásní. Indexy si tam doplní automaticky až PHP, protože bude prvky automaticky přidávat do pole.
Naproti tomu, v Javascriptu Vás vůbec konkrétní index nezajímá (nezajímá?) protože posbíráte všechny objekty se jménem cbox[] a pak s nimi postupně provedete, co budete potřebovat:
JS
function countCb(meno) 
{  var total = 0;
   var objectCollectionCheckbox = document.getElementsByName(meno);
   for (var idx = 0; idx < objectCollectionCheckbox.length; idx++) 
   { if (objectCollectionCheckbox[idx].checked == true) total += 1;
   }
   document.getElementById('cbc').innerHTML = total;
}
HTML
<input name="cbox[]" type="checkbox" value="<?=$row['username']?>" onClick="countCb(this.name)">
<input name="cbox[]" type="checkbox" value="<?=$row['username']?>" onClick="countCb(this.name)">
...
<input name="cboy[]" type="checkbox" value="<?=$row['username']?>" onClick="countCb(this.name)">
<input name="cboy[]" type="checkbox" value="<?=$row['username']?>" onClick="countCb(this.name)">


Jak si můžete všimnout, vytvořil jsem dvě skupiny <input>ů se sérií jmen cbox[] a cboy[]. Ty se budou pak vyhodnocovat samostatně.
Doufám, že jsem nepopletl ty shromažďovací metody. Jsou tuším tři
document.getElementById(IDstring)
-> najde jeden (první, který najde) objekt s daným ID
document.getElementsByName(NAMEstring)
–> posbírá kolekci všech objektů v dokumentu, které mají dané NAME
DOMelement.getElementsByTagName(HTMLTAGstring)
-> posbírá kolekci objektů uvnitř daného elementu, které mají daný HTML tag
Bližší podrobnosti se dozvíte z nápovědy a odkazů.
Chamurappi
Profil
Reaguji na sysla:
Ale když je jednou name="cbox[]", tak si tam ani HTML ani Javascript žádný index nepřibásní.
Ovšem kolekce prvků s daným jménem existuje, akorát se k ní přistupuje jinak.

Ty metody, které zmiňuješ, mi připadají zbytečně upovídané. K document.getElementsByName mám trochu nedůvěru, momentálně si nevzpomínám proč, ale možná je má averze způsobená tím, že na přístup k formulářovým prvkům přes jména nejsou zapotřebí žádné hledací metody, stačí jen sjet po hierarchii.


Reaguji na Mánicku:
1) Zapomeň na eval.
2) V JavaScriptu lze objekt.vlastnost zapsat i jako objekt["vlastnost"] a jelikož ta tvá vlastnost obsahuje znaky, které nejsou dovolené v identifikátoru (hranaté závorky), je pro tebe druhý způsob zápisu jedinou možností. Přesněji:
if (document.reflist["cbox[]"][idx].checked) {
    total += 1;
   }
Mánicka
Profil *
Dekuju moc, uz mi to jede :)
Dik fakt !

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0