Avatar billede yoka Nybegynder
04. februar 2008 - 20:01 Der er 19 kommentarer

switch bøvl!

Hej igen. Jeg bliver klokke rundt i mit javascript :)

Jeg har en dynamisk div hvis indhold skal ændres i forhold til nogle forskellige links man trykker på. Jeg har fire links der hver sætter en variabel; "stat" hedder den, til et tal mellem et og fire, så langt så godt.

Indholdet i diven skulle så gerne skifte efter hvilket tal variablen "stat" er sat til.

Jeg har derfor lavet et en switch til formållet:

onClick='setStat(1)' // denne bliver fyret af når der trykkes på et af linkene

function setStat( value ) { // hvilket starter denne function, alt dette virker

stat = value;
}

// inde i min div har jeg så:

 
                                switch (stat) {
                               
                                  case 1:
                                   
                               
                                   
                                    document.write(" lasagne ");
                                   
                                   
                                    break;
                                  case 2:
                                   
                                   
                                        document.write(" rafrafafjdg");
                                   
                                   
                                   
                                   
                                   
                                   
                                    break;
                                    case 3:
                                    statements; // etc
                                    break;
                                    case 4: 
                                    statements; // etc
                                    break;
                                       
default:
  document.write("braf");
                           
                                }





Men indholdet skifter ikke. Har det noget at gøre med at switch ikke skifter dynamisk med scriptet, at det skal loades igen hvis variablen ænder sig?

På forhånd tak!
Avatar billede nielle Nybegynder
04. februar 2008 - 20:09 #1
Prøv at starte med at erklære din variabel sådan at den bliver global:

var stat = "start værdi"
Avatar billede w13 Novice
04. februar 2008 - 20:09 #2
Jeg forstår ikke helt din kode. Du skriver, at switch'en er inde i div'en. Hvordan kan det lade sig gøre? Kan jeg se hele din kode i sammenhæng, evt. et link?
Avatar billede yoka Nybegynder
04. februar 2008 - 20:41 #3
Jeg har erklæret den global ved at skrive "var stat", i starten af koden. Det glemte jeg lige at skrive. Og min kode er ikke lige online nu, plus den er cirka 1000 linier lang, det er stort site jeg er ved at lave, så jeg tror ikke i nemt vil kunne finde rundt.

Men jeg kan prøve at forklare. Altså jeg har en onclick event når man trykker på et link. I stedet for at linket skulle reloade hele siden, ville jeg gøre det mere Dhtml agtigt, så indholdet i en div bare skiftede. Switch ligger på bedste spaggeti kode manner inde i diven, omsluttet af <script> tags. Funktionerne ligger i headeren. Functionn i headeren som skifter værdien af "stat" skulle så gerne få switchen til at "switche" nu da variablen er ændret, og nyt content skal vises.

Det kan godt være at jeg er total off, og der en nemmere måde at gøre det på, men jeg  er først lige startet med javascript (:
Avatar billede w13 Novice
04. februar 2008 - 20:49 #4
Ja, du er ret off :) din kode i div'en køres kun, når parseren når den, dvs. ved load, før stat er sat. Din switchkode skal ind i en funktion, der kan kaldes på det rigtige tidspunkt. Men igen, det er ret svært for mig at sige præcis hvordan, for hvis det skal være ordentligt kodet afhænger det af, hvordan resten af koden ser ud.
Avatar billede yoka Nybegynder
04. februar 2008 - 20:55 #5
Ok, hahah :). Det kan jeg godt forstå. Men jeg må lige omstrukturere lidt. Nu ved jeg at switch kun køres ved load, tak for det.
Avatar billede olebole Juniormester
04. februar 2008 - 21:14 #6
<ole>

Nej, det ved du forhåbentlig ikke - og det er ingenlunde det, w13 skriver. En switch kan være skrevet, hvor somhelst i dokumentet - men uden kode er det, som w13 skriver - umuligt at sige, hvad du skal gøre  :)

/mvh
</bole>
Avatar billede w13 Novice
04. februar 2008 - 21:16 #7
Som Olebole siger, er det ikke fordi det er en switch, at den køres ved onload. Det er, fordi du ikke har den i en funktion. Funktioner kan kaldes, når man har brug for dem, men når den står uden for en funktion, kan den ikke senere bruges. (I hvert fald ikke sådan uden videre. =)
Avatar billede yoka Nybegynder
04. februar 2008 - 21:39 #8
Ok, det var også sådan jeg forstod det, hehe. Jeg tror jeg er ved at få lidt programmør kuller. Jeg må lige bakse lidt med det og putte switch ind i en funktion.
Avatar billede yoka Nybegynder
04. februar 2008 - 21:44 #9
Ellers kan i se koden her:

Men den har taget seriøst overhånd, og har nok brug for at en brutal oprydning :)
Sådan går det når man arbejder for hurtigt :).

http://peoplewithinstrumentsandamplifiers.com/p/
Avatar billede yoka Nybegynder
05. februar 2008 - 01:08 #10
ok. Jeg har nu sat switch ind i en function, der ligger inde i en div. Men når functionen bliver eksekveret bliver indholdet ikke skrevet i diven, men på en blank side, i 1 sekunds tid?

prøv at gå ind her: http://peoplewithinstrumentsandamplifiers.com/p/

og tryk på "most heard tracks" in firkanten "track & artist popularity" nederst til højre. Tallet bliver ikke skrevet i en den div som javascript koden ligger i men på en blank side?

hvad betyder det?
Avatar billede roenving Novice
05. februar 2008 - 01:14 #11
Ja, bruger du document.write slettes den aktuelle side og en helt ny påbegyndes ...

-- prøv i stedet for document.write at bruge document.getElementById('et_id').firstChild.nodeValue = "lasagne"; !-)
Avatar billede olebole Juniormester
05. februar 2008 - 01:15 #12
Jeg vil meget gerne trykke på et link, men det kræver, du skriver det i en størrelse, der kan læses. Grå tekst i en latterlig lille størrelse gør i hvertfald, at siden er ubrugelig for mig  :)
Avatar billede roenving Novice
05. februar 2008 - 01:27 #13
Øeh, ' "most heard tracks" in firkanten "track & artist popularity" ' ?-)
Avatar billede yoka Nybegynder
05. februar 2008 - 01:54 #14
Til roenving: ok det kigger jeg lige på!
div, firkanten et eller andet hehe/ lige meget :)

til olebole, ja det rigtigt kontrast og størrelse gør siden ret ulæselig for mange lige nu, det skal lige rettes til.
Avatar billede yoka Nybegynder
05. februar 2008 - 01:55 #15
kan man ikke rette posts i dette her forum? kan ikke lige se nogen knap.
Avatar billede roenving Novice
05. februar 2008 - 01:57 #16
Nej du kan ikke rette, men du kan lægge et nyt indlæg til at korrigere tidligere !-)
Avatar billede yoka Nybegynder
05. februar 2008 - 21:23 #17
Fedt, det med nodeValue virkede!

Men hvis nu jeg gerne istedet for lasagne vil skrive noget langt ind med blandt andet apostroffer:

<div id="project_news"><div id="header">New tracks and images - february 07/08</div>Today i have uploaded a lot of my old tracks in the collection "fun wallapanka". Go check it out. I have also put a few new pictures in the album.
<div id="private_artist_more">
<span id="private_pagelinks" ><a href="#" onClick='closeMyPopup("project_news"),projectCheckClose()'>close window</a></span>
</div></div>



hvordan håndterer jeg det?

Jeg prøvede med:



document.getElementById('project_statistics').firstChild.nodeValue = ("<div id='project_news'><div id='header'>");   
                                document.getElementById('project_statistics').firstChild.nodeValue = (" New tracks and images - february 07/08 ");
                                document.getElementById('project_statistics').firstChild.nodeValue = (" </div> ");
                                document.getElementById('project_statistics').firstChild.nodeValue = (" Today i have uploaded a lot of my old tracks in the collection 'fun wallapanka'. Go check it out. I have also put a few new pictures in the album. ");
                                document.getElementById('project_statistics').firstChild.nodeValue = ("  <div id='private_artist_more'> <span id='private_pagelinks' > ");
                                document.getElementById('project_statistics').firstChild.nodeValue = (" <a href='#' onClick='closeMyPopup('project_news'),projectCheckClose()'>close window</a></span> ");   
                                document.getElementById('project_statistics').firstChild.nodeValue = (" </div></div> ");


men dette resulterede bare i at den overskriver sig selv og ender med kun at skrive den sidste nodeValue ud.

hmm?
Avatar billede olebole Juniormester
05. februar 2008 - 23:23 #18
Nu forstår jeg! De nederste bokse er godtnok synlige i FF - men ikke i IE6  ;o)
Avatar billede w13 Novice
24. april 2008 - 12:08 #19
Kommet videre?
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