03. august 2004 - 19:18
Der er
39 kommentarer og 1 løsning
array gennem for løkke
jeg har et array som jeg vil køre gennem en for løkke, men det virker ikke helt som det skal!? var mit_array = new Array(); mit_array[5] = new Array(43,2,8,93); for(i=0; mit_array[5].length>i; i++) { min_funktion(mit_array[5][i]); }
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
03. august 2004 - 19:23
#1
Hvad gør din_funktion ?-) -- for der kan være mærkværdigheder forbundet med variabel-behandlinger !-)
03. august 2004 - 19:24
#2
var expand = new Array(); function thread_expand(thread) { if('undefined' == typeof expand[thread]) expand[thread] = true; var img = 'img'+thread; var div = 'div'+thread; var td = 'td'+thread; if(expand[thread]) { document.getElementById(img).src = 'gfx/debate_thread_open.gif'; document.getElementById(div).style.display = ''; document.getElementById(td).style.backgroundImage = "url('gfx/debate_thread_bg.gif')"; } else { document.getElementById(img).src = 'gfx/debate_thread_close.gif'; document.getElementById(div).style.display = 'none'; document.getElementById(td).style.backgroundImage = ''; } expand[thread] = !expand[thread]; } var thread_arr = new Array(); function threads(thread) { for(i=0; thread_arr[thread].length>i; i++) { thread_expand(thread_arr[thread][i]); } }
03. august 2004 - 19:27
#3
Kommer den ikke ind i den sekundære funktion ?-)
03. august 2004 - 19:29
#4
hvad mener du?
03. august 2004 - 19:31
#5
I min første funktion er der nogle variabler: img, div og td... Hvordan kan jeg lave dem om til arrays?? eks. 'img'+thread => img[thread]
03. august 2004 - 19:34
#6
Prøv efter din if('undefind' ... at indsætte: alert(thread); -- så du kan se, om den når frem ...
03. august 2004 - 19:38
#7
nogle af dem når frem?! får en fejl ved: document.getElementById(div).style.display = ''; den siger det ikke er et objekt?!
03. august 2004 - 19:40
#8
arh... det er jo fordi at objektet ikke findes... *dooh* hvordan kan man få den til at escape hvis det ikke findes? og det skal helst gøres i den første funktion "threads"
03. august 2004 - 19:47
#9
Det er jo irriterende, da du så skal undersøge img, div og td-elementernes eksistens, kan du ikke lave en mekanisme, så kun eksisterende elementer kan være i sådan et array ?-) -- alternativt vil jeg tro, at du relativt nemt kan skrive din funktion om: function thread_expand(thread){ var img = document.getElementById('img'+thread); var div = document.getElementById('div'+thread); var td = document.getElementById('td'+thread); if(!img || !div || !td)return; if('undefined' == typeof expand[thread]) expand[thread] = true; if(expand[thread]){ img.src = 'gfx/debate_thread_open.gif'; div.style.display = ''; td.style.backgroundImage = "url('gfx/debate_thread_bg.gif')"; }else{ img.src = 'gfx/debate_thread_close.gif'; div.style.display = 'none'; td.style.backgroundImage = ''; } expand[thread] = !expand[thread]; }
03. august 2004 - 19:50
#10
hvordan kunne jeg så skrive min funktion "thread_expand" om med variablerne: img, div og td? altså så de bliver til arrays? eks. img[thread] i stedet for at der kommer en millard forskellige variabler, så der kun er 3 arrays :)
03. august 2004 - 19:53
#11
Du kan sagtens lægge objekter i arrays også, så når du skaber dem, kan du smide dem i arrays ... -- men det lyder som et eller andet forum-system, og så opdaterer du vel siden engang imellem ?-) -- i så fald er det jo nok nemmest at opbygge arrays onload !-)
03. august 2004 - 20:01
#13
fatter nada af javascripts... :-/
03. august 2004 - 20:01
#14
selvom det alligevel ikke er så vildt meget forskelligt som php og andre sprog :)
03. august 2004 - 20:13
#15
var img = new Array(); var div = new Array(); var td = new Array(); function makeObjArrs(){ var imgs = document.getElementsByTagName("IMG"); for(i=0:imgs.length>i;i++){ if(imgs[i].id.indexOf("img")==0){ img[+imgs[i].id.replace(/img(\d+)$/,"$1")] = img[i]; } } var divs = document.getElementsByTagName("DIV"); for(i=0:divs.length>i;i++){ if(divs[i].id.indexOf("div")==0){ div[+divs[i].id.replace(/div(\d+)$/,"$1")] = div[i]; } } var tds = document.getElementsByTagName("TD"); for(i=0:tds.length>i;i++){ if(tds[i].id.indexOf("td")==0){ td[+tds[i].id.replace(/td(\d+)$/,"$1")] = td[i]; } } } window.onload = makeObjArrs; function thread_expand(thread){ if(!img[thread] || !div[thread] || !td[thread])return; if('undefined' == typeof expand[thread]) expand[thread] = true; if(expand[thread]){ img[thread].src = 'gfx/debate_thread_open.gif'; div[thread].style.display = ''; td[thread].style.backgroundImage = "url('gfx/debate_thread_bg.gif')"; }else{ img[thread].src = 'gfx/debate_thread_close.gif'; div[thread].style.display = 'none'; td[thread].style.backgroundImage = ''; } expand[thread] = !expand[thread]; }
03. august 2004 - 20:15
#16
-- øv, der mangler et lille 's' i alle tildelings-linjerne: img[+imgs[i].id.replace(/img(\d+)$/,"$1")] = imgs[i]; div[+divs[i].id.replace(/div(\d+)$/,"$1")] = divs[i]; td[+tds[i].id.replace(/td(\d+)$/,"$1")] = tds[i];
03. august 2004 - 20:17
#17
hehe... jamen hvis nu jeg også ændrer alle id's på td, div og img altså sådan: <td id="td[45]"> hvordan ville min funktion så se ud? tror du misforstod mig lidt :)
03. august 2004 - 20:25
#18
Man kan ikke opbygge arrays på den måde, men man kunne godt hente dem med en .getElementById('td['+thread+']') Bemærk, at man _ikke_ kan udnytte en array-behavior, men må benytte det som før bare tilføjet et par tegn mere ... -- men jeg tror at du skal op i mange tusind tråde, før den bliver hurtigere, end den pegepind til elementerne vi nu lægger i et array !-) -- og det jeg gør i ovenstående funktion er faktisk at lægge eksempelvis td45 ind i variablen td[45] !o]
03. august 2004 - 20:40
#19
jeg har valgt at gøre det således, da jeg synes det ser lidt "pænere" ud :) var img = document.getElementById('img['+thread+']'); men så lige for at komme tilbage til det oprindelige spm... hehe det med at undersøge om en given div, td eller img eksisterer overlader jeg til php, men hvordan kan jeg lave min funktion "threads" således at den medsendte var "task" angiver om den skal åbne eller lukke alle indlæg i en tråd? hvordan kan det lade sig gøre... eks. task = 1 // åbn tråd task = 0 // luk tråd
03. august 2004 - 20:47
#20
Det er da det, du kontrollerer med din variabel expand[x] ?-) -- så den skal du bare sætte til false lige før kaldet: function threads(thread){ for(i=0; thread_arr[thread].length>i; i++){ expand[thread_arr[thread][i]] = false; thread_expand(thread_arr[thread][i]); } }
03. august 2004 - 20:51
#21
hehe... nej du misforstår... der skal være en knap til hver ting... altså en til at åbne og en til at lukke... den skal ikke selv sætte expand[x] til false med mindre jeg giver den besked på at den skal :p
03. august 2004 - 20:54
#22
function threads(thread,action){ for(i=0; thread_arr[thread].length>i; i++){ expand[thread_arr[thread][i]] = action; thread_expand(thread_arr[thread][i]); } }
03. august 2004 - 20:58
#23
niiice!! :D lav et svar...
03. august 2004 - 21:05
#24
Velbekomme '-) -- og den ende fra dit foregående spørgsmål havde jeg altså ikke genneskuet !-)
03. august 2004 - 21:14
#25
;)
03. august 2004 - 21:25
#26
-- og tak for point ;~}
03. august 2004 - 21:47
#27
og så lige for en gangs skyld har jeg lige et ekstra spørgsmål ;) hvordan føjer man en værdi til et array ad gangen?? var thread_arr = new Array(); thread_arr[5] = new Array(); thread_arr[5] = 5; thread_arr[5] = 7; thread_arr[5] = 10;
03. august 2004 - 22:20
#28
thread_arr[5][thread_arr[5].length] = 5; thread_arr[5][thread_arr[5].length] = 7; thread_arr[5][thread_arr[5].length] = 10;
03. august 2004 - 22:35
#29
jeg synes ikke det virker?! thread_arr[5] = new Array(5); thread_arr[5][thread_arr[5].length] = 7; thread_arr[5][thread_arr[5].length] = 10;
03. august 2004 - 22:44
#30
Hvad mangler du ?-) Hvis du erklærer et array med een værdi i, vil javascript sige til sig selv: -- et array med kun eet element giver ikke mening, så jeg laver et array med det antal elementer, som er beskrevet i parameteren !-) Så sådan: var thread_arr = new Array(); thread_arr[5] = new Array(); thread_arr[5][thread_arr[5].length] = 5; thread_arr[5][thread_arr[5].length] = 7; thread_arr[5][thread_arr[5].length] = 10; -- så kan du alerte, feks. element 1: alert(thread_arr[5][1]) -- og du vil få 7 i alert-boxen !-)
03. august 2004 - 22:53
#31
uhh uhh uhhh.. nu virker det!! ;) tark.. hehe
04. august 2004 - 14:57
#33
Hvordan ?-)
04. august 2004 - 15:09
#34
jeg laver mit array i php og så udskriver den til javascript i stedet for at udskrive hvert eneste var til et array i java nu kan jeg bare ikke åbne/lukke den sidste tråd.. jeg får en fejl i js
04. august 2004 - 15:15
#35
?-) -- jeg kan ikke få ovenstående link til at fejle uanset hvad jeg gør i hvilken browser ...
04. august 2004 - 15:20
#36
men det er KUN i den sidste tråd man ikke kan... altså i tråden med overskriften: "id 6"... knappen Åbn og Luk
04. august 2004 - 15:27
#37
Du har jo også den fejl, jeg påpegede tidligere: <script type="text/javascript"> thread_arr[6] = new Array(6); </script> -- når der er et tal som eneste parameter, har arrayet 6 uinitialiserede elementer ,-(
04. august 2004 - 15:43
#38
kan jeg ikke få den til at lade være med det?! :)
04. august 2004 - 15:51
#39
-- ikke javascript ... -- så må du gøre det i dit php-scipt, netop derfor påpegede jeg, at du skulle erklære den som tom array og så fylde den op ...
04. august 2004 - 16:13
#40
ok... tak for hjælpen endnu engang ;)
Vi tilbyder markedets bedste kurser inden for webudvikling