[JS]Name als array uitlezen
ik heb een dynamische lijst met inputs. De naam van deze inputs is als volgt :
Hiervan is de eerste key dynamisch.
Nu wil ik in JS dit als 2 dimentionale array uitlezen.
Daarvoor heb ik tot nu toe de volgende code
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function createArrayFromName(elName , inpTyp , src)
{
if(!src)
{
src = document ;
}
var allElements = src.getElementsByTagName(inpTyp) ;
var myReturn = new Array() ;
for(var el in allElements)
{
var myEl = allElements[el] ;
if(myEl.name.match('^'+elName+'.+'))
{
var myData = myEl.name.split('[');
myData[1] = myData[1].replace(']','');
myData[2] = myData[2].replace(']','');
myReturn[myData[1]][myData[2]] = myEl.value
}
}
return myReturn ;
}
console.log(createArrayFromName('project' , 'input' , $('hours_list')))
{
if(!src)
{
src = document ;
}
var allElements = src.getElementsByTagName(inpTyp) ;
var myReturn = new Array() ;
for(var el in allElements)
{
var myEl = allElements[el] ;
if(myEl.name.match('^'+elName+'.+'))
{
var myData = myEl.name.split('[');
myData[1] = myData[1].replace(']','');
myData[2] = myData[2].replace(']','');
myReturn[myData[1]][myData[2]] = myEl.value
}
}
return myReturn ;
}
console.log(createArrayFromName('project' , 'input' , $('hours_list')))
Nu krijg ik alleen de volgende error:
Iemand enig idee hoe ik dit kan oplossen?
Gewijzigd op 01/01/1970 01:00:00 door Jesper Diovo
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
this.createArrayFromName = function(elName , inpTyp , src)
{
if(!src)
{
src = document ;
}
var allElements = src.getElementsByTagName(inpTyp) ;
var myReturn = new Array() ;
for(var el in allElements)
{
var myEl = allElements[el] ;
if(myEl.name && myEl.name.match('^'+elName+'.+'))
{
var myData = myEl.name.split('[');
myData[1] = myData[1].replace(']','');
myData[2] = myData[2].replace(']','');
if(!myReturn[myData[1]])
{
myReturn[myData[1]] = new Array()
}
myReturn[myData[1]][myData[2]] = myEl.value
}
}
return myReturn ;
}
{
if(!src)
{
src = document ;
}
var allElements = src.getElementsByTagName(inpTyp) ;
var myReturn = new Array() ;
for(var el in allElements)
{
var myEl = allElements[el] ;
if(myEl.name && myEl.name.match('^'+elName+'.+'))
{
var myData = myEl.name.split('[');
myData[1] = myData[1].replace(']','');
myData[2] = myData[2].replace(']','');
if(!myReturn[myData[1]])
{
myReturn[myData[1]] = new Array()
}
myReturn[myData[1]][myData[2]] = myEl.value
}
}
return myReturn ;
}
En voor de mensen die het willen gaan gebruiken, op het moment werkt het alleen met 2 dimentionale arrays. Named keys heb ik niet getest maar zou haast wel moeten werken
Heb alleen geen idee hoe ik dat moet gaan aanpakken.
Kan iemand me een zetje in de goede richting geven?
Je krijgt dan zo'n constructie (php voorbeeld, maar moet voor js ook werken):
Code (php)
Wanneer de name nog een array is, dan roep je met die array de functie opnieuw aan. Dat gaat allemaal automatisch en dat is ook hetgeen wat we recursief noemen.
Ik heb dit aan data :
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
array("project", "2", "1");
array("project", "2", "2");
array("project", "2", "3");
array("project", "2", "4");
array("project", "2", "5");
array("project", "2", "6");
array("project", "2", "7");
array("project", "1", "1");
array("project", "1", "2");
array("project", "1", "3"]);
array("project", "1", "4");
array("project", "1", "5");
array("project", "1", "6");
array("project", "1", "7");
array("project", "2", "2");
array("project", "2", "3");
array("project", "2", "4");
array("project", "2", "5");
array("project", "2", "6");
array("project", "2", "7");
array("project", "1", "1");
array("project", "1", "2");
array("project", "1", "3"]);
array("project", "1", "4");
array("project", "1", "5");
array("project", "1", "6");
array("project", "1", "7");
En dat moet :
bump
project[1][]
project[1][]
project[1][]
project[2][]
project[2][]
Dan kan je met getelementsbyname met "project[1][]" allen ophalen en dan nog eens met "project[2][]" de andere...