Toon posts:

[js] checkbox name, array

Pagina: 1
Acties:

Verwijderd

Topicstarter
Klein vraagje;

Ik bouw met PHP dynamisch een formulier op met checkboxes daarin.
De naam van de checkboxes zijn bij allen test[] (op die wijze ontvang ik de waarden als array in PHP, op de volgende pagina).

Als ik een aantal checkboxes heb en ik druk op versturen, dan ontvang ik de waarden van de checkboxes in de POST-array genaamd `test`

code:
1
2
3
4
5
    [test] => Array
        (
            [0] => 4
            [1] => 5
        )


Ik gebruik, nog voordat het formulier verzonden is, javascript om te controleren of er minimaal één van de checkboxes aangevinkt is. Om dit te controleren loop ik door de statussen (.checked) van de checkbox-elementen heen.

code:
1
2
3
for(i=0;i<document.getElementById('delete_subpr_form')['test[]'].length;i++)
{
//etc.


Echter, en dat is mijn vraag, krijg ik een foutmelding als er maar één checkbox in het formulier staat. Javascript ziet het element `document.getElementById('delete_subpr_form')['test[]']` dan niet meer als array, maar als string. Is dit een bugje, of doe ik iets verkeerd?

Edit;
Iets makkelijker uitgelegd is:
Als ik een formulier heb dat er zo uitziet:

code:
1
2
3
4
<form>
<input type="checkbox" name="test[]" value="1">
<input type="checkbox" name="test[]" value="2">
</form>


...dan:
code:
1
document.getElementById('delete_subpr_form')['test[]'].length == 2;


maar als ik een formulier heb dat er zo uitziet;
code:
1
2
3
<form>
<input type="checkbox" name="test[]" value="1">
</form>


...dan:
code:
1
document.getElementById('delete_subpr_form')['test[]'].length == 'undefined';


Nogmaals, is dit een bugje of doe ik iets op de verkeerd wijze?

[ Voor 45% gewijzigd door Verwijderd op 10-06-2005 15:08 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:23

crisp

Devver

Pixelated

gewoon eerst afvragen of het element wel een length property heeft:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function checkboxChecked(checkbox)
{
    if (checkbox.length)
    {
        var i = checkbox.length;
        while(i--)
        {
            if (checkbox[i].checked) return true;
        }

        return false;
    }
    else
    {
        return checkbox.checked;
    }
}

Intentionally left blank


Verwijderd

Topicstarter
crisp schreef op vrijdag 10 juni 2005 @ 15:08:
gewoon eerst afvragen of het element wel een length property heeft:
Is inderdaad wat ik nu doe (zie mijn edit die ik aan het maken was toen jij een reply gaf..) en wat de hamvraag was, maar is dit niet enigzins raar gedrag van IE / Javascript? Ik bedoel, met de `[]` probeer ik aan te geven dat ik het object als een array wil behandelen. Maar IE/JS doet dit pas als er meer dan één waarde in zit?

offtopic:
Briljant loopje overigens, met het while(i--) stukje. Maar mijn waardering in verband met javascript had je al..

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:23

crisp

Devver

Pixelated

Verwijderd schreef op vrijdag 10 juni 2005 @ 15:11:
[...]


Is inderdaad wat ik nu doe (zie mijn edit die ik aan het maken was toen jij een reply gaf..) en wat de hamvraag was, maar is dit niet enigzins raar gedrag van IE / Javascript? Ik bedoel, met de `[]` probeer ik aan te geven dat ik het object als een array wil behandelen. Maar IE/JS doet dit pas als er meer dan één waarde in zit?
De '[]' maken het in de DOM nog geen array hoor. Daar is iets pas een 'array' (eigenlijk een NodeList) als meerdere elementen dezelfde name-property delen, de '[]' is daar in principe niet eens voor nodig.
Het verschil met een element waarvan de name uniek is dat je dan enkel naar een HTMLElement verwijst - JS maakt daar geen NodeList met 1 item van.

Intentionally left blank


Verwijderd

Topicstarter
crisp schreef op vrijdag 10 juni 2005 @ 15:19:
[...]

De '[]' maken het in de DOM nog geen array hoor.
Dát is waar het om ging.
Voor iemand die er in de toekomst belang bij heeft, make yourself aware of it.
En Crisp, bedankt.

[ Voor 6% gewijzigd door Verwijderd op 10-06-2005 15:23 ]