Toon posts:

[JS] Array wordt gezien als object...

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb het volgende stukje javascript ( in me header staan ):
code:
1
2
3
4
5
6
7
8
9
10
11
12
var groep1 = new Array; // Group
groep1[0] = "";         // Parent
groep1[1] = "groep5";   // Sub-Group
groep1[2] = "recht3";   // Child
groep1[3] = "recht4";   // Child

function checksub(group,form,state){
   var grp = eval( group );
   for ( var i=1; i<grp.length; i++ ) {
        form.elements[grp[i]].checked = state;
    }
}


en de functie checksub ( in de body-part ) wordt als volgt aangeroepen:
code:
1
<input type="checkbox" name="groep1" onClick="checksub( 'groep1', this.form, this.checked );">


dit werkt...

echter ik wil het liefst zeg maar gewoon totaal niet werken met eval( ... ), dit lijkt me logisch echter als ik de aanroep dan aanpas naar

code:
1
<input type="checkbox" name="groep1" onClick="checksub( groep1, this.form, this.checked );">


en de functie aanpas naar

code:
1
2
3
4
5
function checksub(group,form,state){
   for ( var i=1; i<group.length; i++ ) {
        form.elements[group[i]].checked = state;
    }
}


dan gebeurt er niks als ik op de checkbox klik en als ik de variabele group bekijk in de function checksub zegt ie dat het een object is...

doe ik nu wat fout of zie ik wat over het hoofd?

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Waarom maak je dan geen 2-dimensionale array?
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
var groups = new Array();
var groups['group1'] = new Array();
groups['groep1'][0] = "";         // Parent
groups['groep1'][1] = "groep5";   // Sub-Group
groups['groep1'][2] = "recht3";   // Child
groups['groep1'][3] = "recht4";   // Child

function checksub(group,form,state){
   for ( var i=1; i<groups[group].length; i++ ) {
        form.elements[groups[group][i]].checked = state;
    }
}

Intentionally left blank


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 19-08 22:14

Bosmonster

*zucht*

Een Array in Javascript is ook gewoon een Object :)

Maar kijk naar crisps voorbeeld.. dat is simpelweg de beste oplossing.

Verwijderd

Topicstarter
ok duidelijk.... :)

en ik denk dat als ik hem 2 dimensionaal maak de array dat het te veel geheugen kost want de funtie moet immers recursief worden...


echter vraag ik me nog steeds af waarom ik hem op de 2de manier zonder eval kan aanroepen zonder enig resultaat

[ Voor 34% gewijzigd door Verwijderd op 23-12-2002 18:58 ]


Verwijderd

Topicstarter
code:
1
2
3
4
5
6
7
function checksub( group,form,state ) {
   for ( var i=1; i<groups[group].length; i++ ) {
        if ( groups[groups[group][i]] != "undefined" )
            checksub( groups[groups[group][i]],form,state );
        form.elements[groups[group][i]].checked = state;
    }
}


zo zo de functie uiteindelijk moeten worden echter hij geef de ene keer de melding

stack overflow
en de andere keer
out of memory

dus ik denk dat de array te groot is??? ( dit verbaast me zelf )

stom van mij
foutje bedankt :P

checksub( groups[groups[group][i]],form,state );

moet natuurlijk zijn

checksub( groups[group][i],form,state );

[ Voor 35% gewijzigd door Verwijderd op 23-12-2002 20:10 ]