Avatar billede supermand69 Nybegynder
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]);
}
Avatar billede roenving Novice
03. august 2004 - 19:23 #1
Hvad gør din_funktion ?-)

-- for der kan være mærkværdigheder forbundet med variabel-behandlinger !-)
Avatar billede supermand69 Nybegynder
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]);
    }
}
Avatar billede roenving Novice
03. august 2004 - 19:27 #3
Kommer den ikke ind i den sekundære funktion ?-)
Avatar billede supermand69 Nybegynder
03. august 2004 - 19:29 #4
hvad mener du?
Avatar billede supermand69 Nybegynder
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]
Avatar billede roenving Novice
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 ...
Avatar billede supermand69 Nybegynder
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?!
Avatar billede supermand69 Nybegynder
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"
Avatar billede roenving Novice
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];
}
Avatar billede supermand69 Nybegynder
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 :)
Avatar billede roenving Novice
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 !-)
Avatar billede supermand69 Nybegynder
03. august 2004 - 20:00 #12
lige præcis ;)

http://clark.avansis.dk/temp/thread/new.php

men hvordan kunne jeg så lave min funktion om? altså så den kørte med arrays i stedet? :)
Avatar billede supermand69 Nybegynder
03. august 2004 - 20:01 #13
fatter nada af javascripts... :-/
Avatar billede supermand69 Nybegynder
03. august 2004 - 20:01 #14
selvom det alligevel ikke er så vildt meget forskelligt som php og andre sprog :)
Avatar billede roenving Novice
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];
}
Avatar billede roenving Novice
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];
Avatar billede supermand69 Nybegynder
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 :)
Avatar billede roenving Novice
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]
Avatar billede supermand69 Nybegynder
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
Avatar billede roenving Novice
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]);
    }
}
Avatar billede supermand69 Nybegynder
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
Avatar billede roenving Novice
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]);
    }
}
Avatar billede supermand69 Nybegynder
03. august 2004 - 20:58 #23
niiice!! :D

lav et svar...
Avatar billede roenving Novice
03. august 2004 - 21:05 #24
Velbekomme '-)

-- og den ende fra dit foregående spørgsmål havde jeg altså ikke genneskuet !-)
Avatar billede supermand69 Nybegynder
03. august 2004 - 21:14 #25
;)
Avatar billede roenving Novice
03. august 2004 - 21:25 #26
-- og tak for point ;~}
Avatar billede supermand69 Nybegynder
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;
Avatar billede roenving Novice
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;
Avatar billede supermand69 Nybegynder
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;
Avatar billede roenving Novice
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 !-)
Avatar billede supermand69 Nybegynder
03. august 2004 - 22:53 #31
uhh uhh uhhh.. nu virker det!! ;)

tark.. hehe
Avatar billede supermand69 Nybegynder
04. august 2004 - 14:51 #32
har lige lavet en lidt bedre løsning, men nu vil den ikke åbne/lukke den sidste tråd?

http://clark.avansis.dk/temp/thread/new.php
Avatar billede roenving Novice
04. august 2004 - 14:57 #33
Hvordan ?-)
Avatar billede supermand69 Nybegynder
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
Avatar billede roenving Novice
04. august 2004 - 15:15 #35
?-)

-- jeg kan ikke få ovenstående link til at fejle uanset hvad jeg gør i hvilken browser ...
Avatar billede supermand69 Nybegynder
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
Avatar billede roenving Novice
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 ,-(
Avatar billede supermand69 Nybegynder
04. august 2004 - 15:43 #38
kan jeg ikke få den til at lade være med det?! :)
Avatar billede roenving Novice
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 ...
Avatar billede supermand69 Nybegynder
04. august 2004 - 16:13 #40
ok... tak for hjælpen endnu engang ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester