Håber at JavaScript-folket lige vil se på følgende kode :)
- CODE ----------------------------------------------------------- <script type="Text/JavaScript"> var id; function hit(id) { var open_id = "content_"+id; open_id.style.display='none'; //LINJE 5 // Det er nok i ovenstående linje fejlen er, da det virker hvis jeg // skriver content_produkter.sty... } </script>
JavaScript har udviklet sig lidt til at blive en kunst, ikke en videnskab - med alle de browsere og versioner der nu findes. Jeg kender ikke den ultimative tilgangsvinkel.
Den officielle standard kan købes hos ECMA, der vedligeholder standarden for ECMA-script, som JavaScript nu om stunder er en implementering af. Om du får noget ud af at læse den, er dog ikke sikkert. Den er absolut ikke stillet op som NS's eller php.net's sider. Det kræver faktisk, man er rigtig godt hjemme i at læse specifikationer, at få noget ud af den. Er du det, er den til gengæld kanuuun :)
Problemet er blot, folk blander flere forskellige implementeringer (f.eks: JavaScript og MS' JScript) af ECMA-script sammen og tror, de skriver JavaScript.
Erik >> Diversitet er en skøn ting ... gid der var endnu flere forskellige brusere.
Til gengæld kunne jeg godt undvære en enkelt fabrikant, hvis mål det er at eje WWW - og for hvem kvalitet og kompatibilitet aldrig har været et mål i sig selv ;o) /mvh
"Den officielle standard kan købes hos ECMA(...)" - jaaaeh (lidt smygende), jeg vil jo godt undgå at skulle købe sagerne, da jeg nok vil bruge den relativt sjældent :) - hvor kan den købes og hvad koster den? (hm, hvad hedder den? - måske kan den lånes på biblioteket?)
Flere browsere (brusere, broscher etc.)? Hvis der dog bare var een browser der opfylder alle standarder, så ville alle være mere glade :) - jeg ville i hvert fald ;)
Anyway, lige et tillægsspørgsmål. Nu vil jeg jo gerne have billedet ud for hvert menupunkt til at skifte også. Hvordan klares det med JavaScript?
Til spm. ang. ECMA: http://www.ecma.ch/ - og nej, du kan (næsten) med garanti ikke finde den på biblioteket.
Det andet må du levere noget mere kode til ... meget gerne en URL, da vi så slipper for at skulle gætte os til en bunke PHP-genereret HTML-/JS-kode :) /mvh
=>olebole: Jeg sidder lige og flæsker i det - smider det op senere (måske først i morgen). Håber det går :) Tak for linket, men hvad hedder bogen? - eller er det blot een af publikationerne der ligger på ecma.ch?
Du kunne jo nøjes med ét span med billede. Så kunne du give billedet name="pic_$tekst_lower"
Så skulle vel du kunne skifte billedet med: var im = document.images["pic_"+id]; im.src = ( im.src.indexOf("plus.gif")!=-1 )? "minus.gif" : "plus.gif";
Hm, måden jeg har lavet det på, er ikke helt hensigtsmæssigt - eks. kan man ikke have to menupunkter med samme navn... :-/
Anyway, olebole - tusind tak! Det virker, men jeg forstår ikke helt hvad der egentlig sker. - hvad metyder "?" og ":"? - hvad skal "!=-1" gøre godt for? Det må være noget i stil med at et "billede" (<img...>) har et id, som man så kan skifte(?)
Nej, man kan ikke have to menupunkter med samme navn ... det har man heller ikke :) Det er jo ikke smart med to vejskilte til Snave, der peger i hver sin retning - og kan man skrive noget forskelligt på forsiden af skiltet, kan man også give dem hvert sit serienummer på bagsiden. Håber, du forstår analogien ;oD
Så det næste: bla = (betingelse)? "noget" : "noget andet"; er en forkortet udgave af en if-sætning. Der står i virkeligheden: if (betingelse) { bla = "noget"; } else { bla = "noget andet"; }
Og til betingelsen: ib = "dreng"; alert( ib.indexOf("e") ); returnerer "2" ... nemlig den plads, "e" står på i strengen, der repræsenteres ved variablen ib (altså "dreng"). Husk første plads er "0" og derfor står "e" på plads nummer 2. alert( ib.indexOf("d") ); returnerer derfor "0". Hvis _ikke_ bogstavet, vi leder efter eksisterer i strengen, returneres "-1" - f.eks: alert( ib.indexOf("k") );
Sætter vi det op i en betingelse, kan vi bruge operatoren "!=", som betyder "forskellig fra". Altså: if ( ib!=bo ) alert("ib er ikke bo");
Når jeg skriver: im.src = ( im.src.indexOf("plus.gif")!=-1 )? "minus.gif" : "plus.gif"; betyder det derfor: "Hvis im.src (billedets øjeblikkelige source's sti/navn indeholder 'plus.gif', skal im.src sættes til 'minus.gif'. Ellers sættes im.src til 'plus.gif'."
im.src er i eksemplet jeg gav i mit forrige indlæg er sammensat af "pic_" og din variabel "$tekst_lower". Hvis variablen har værdien "ole", har billedet altså id'en "pic_ole". Altså ser eksemplet nu sådan ud: var im = document.images["pic_ole"]; im.src = ( im.src.indexOf("plus.gif")!=-1 )? "minus.gif" : "plus.gif"; Hvis det billede i dokumentet, der hedder "pic_ole", har en source, der indeholder "plus.gif", skal dets source skiftes til "minus.gif". Ellers skal sourcen skiftes til "plus.gif".
Det hjalp bestemt! Tusind tak! Det jeg ikke forstod var at bla = (betingelse)? "noget" : "noget andet"; i virkeligheden er en if. Desuden forstod jeg ikke hvad indexOf() gjorde :)
Det glæder mig - og selv tak ;o) Du skal da også lige ha' den 'helt sorte' if-sætning. Man kan faktsk også udelade parentesen: bla = "dreng"; res = bla.indexOf("r")!=-1? "Fundet" : "Ikke fundet"; alert(res);
Den ses ikke så ofte (og er vel heller ikke så overskuelig), men nu kender du den altså :) /mvh
Er det virkelig jf. standarden? (De færreste standarder anbefaler da uoverskuelig kode)
Anyway, nu et nyt problem:
- CODE --------------------------------------------------------------- <script type="Text/JavaScript"> var id, type; function change(id, type) { if (type == "menu") { var im = document.images["billede"]; im.src = (im.src.indexOf("plus")!=-1)? "gfx/png/minus.png" : "gfx/png/plus.png"; } else { /****************************** * Ja, det er her den er gal! * *****************************/ var im_a = document.images["billede_"+%]; im_a = "gfx/png/empty.png";
var im_b = document.images["billede_"+id]; im_b.src = "gfx/png/arrow.png"; } } </script>
"Jeg snakker med mig selv, snakker med mig selv. Taler med mit bedre jeg." :D
Jeg er ikke rigtig klar over, om du endte med at have probs ... please forklar, hvis det er tilfældet.
Ja, short-hand-if'en med parentesen er i hvert fald helt i overensstemmelse med standarden i JS - og i øvrigt også i PHP (og andre sprog, jeg ikke selv behersker). Dog med den undtagelse, at man i PHP ikke kan lave udvidelsen i (05/01-2003 19:46:35). Her kan man kun have én betingelse i udtrykket. Skal jeg være helt ærlig, ved jeg ikke om short-hand-if'en uden parentes er 'lovlig'. Jeg bryder mig ikke om den og bruger den derfor ikke selv.
I begyndelsen, fandt jeg også short-hand-if'er uoverskuelige ... idag foretrækker jeg dem. Sådan går det nogen gange :) /mvh
Men i JS er det ikke nødvendigt med parenteser: var bla = (1==1)? "noget" : (3==2)? "noget andet" : "Så det her da!"; alert(bla); fungerer helt fint - og er, så vidt jeg ved, gangbart ifølge ECMA. Men det er klart mere stringent at anvende parenteser, der angiver afviklingsfølgen ;o) /mvh
Måske nogen har tid til at se på et "lille" problem?
Når jeg forsøger at fejlfinde siden (fnof.dyndns.dk/vs/www/), er de eneste to fejl jeg får følgende to: "Error: invalid break Source file: http://fnof.dyndns.dk/vs/www/ Line: 79 break;"
og
"Error: overout not defined"
Den første fejl tror jeg selv kan jeg fikse, men den anden fatter jeg ikke. Funktionen "overout" findes... (hm, _skal_ en funktion returnere noget måske?)
1. Fejl ligger her: // Til at skifte icon med. // FIXME: IE5.0 kan ikke lide "break" hvis det ikker i et loop. if (im.src.indexOf("plus_onover")!=-1) { im.src = "gfx/png/minus_onover.png"; break;
'break' bruger man til at stoppe et loop. Man kan bruge det ved: for (i=0; i<15; i++) { if (betingelse) { // Gør et eller andet break; } }
Hvis betingelsen opfyldes inden loop'et er nået til i=14, stoppes loopet og koden derefter afvikles.
Jeg får ikke fejl i IE ... men i NS6. Fejlen ligger i, at du i denne linie ikke sammenligner ( == eller != ), men sætter lig med ( = ): // Til at skifte icon med. if (im.src.indexOf("onover")=-1) {
En online-validator til JS ...? Ja: OleBole :D Nej, jeg kender ikke en ;o) /mvh
Det burde vel også kunne gøre det at gøre følgende: if (im.src.indexOf("plus.")!=-1) { im.src = "gfx/png/minus.png"; } else if (im.src.indexOf("minus.")!=-1) { im.src = "gfx/png/plus.png"; } ...
Hm, nu mangler jeg så bare een funktion, nemlig en funktion der skjuler alle sagerne... Er der en måde hvorpå jeg kan få fat i alle navne på billeder etc.?
"getElementsByTagName" - hvor finder jeg selv ud af hvad sådan noget hedder? Er der ikke en god JavaScript-tutorial et sted - een som fører læseren længere end til bare at lave en alert ol.? - ikke olebole@eksperten.dk ;)
Det er ikke JavaScript, men DOM (Document Object Model), som beskrives af W3C (www.w3.org). At vi så bruger DOM'en til at kalde elementerne gennem i JS, er så en anden ting ;o) /mvh
Hvis du bruger DreamWeaver ligger der en fin JS-reference idbygget (ikke tutorial). Så vidt jeg husker åbnes den med 'Ctrl+F1' eller 'Ctrl+Shift+F1'. Det er en fomindsket udgave af O'Reilly's JavaScript-bog, som er _klassikeren_. Måske, du har set den ... hvid og grøn, med et næsehorn udenpå (kaldes også 'The Rhino'). /mvh
Den formindskede udgave, jeg beskrev, ligger i DW ;o) Bogen findes i en 'moppesjong' på omkring 500 sider og i en pocket-udgave. Se også: http://www.oreilly.com Check sitet _grundigt_ ud ... der er tonsvis af gode artikler om allehånde web-teknologi :o) Og så tror jeg, vi skal stoppe chatten her (selvom det er svært hyggeligt) *LoooL* /mvh
Er de brugere der vitterligt har hjulpet mig, ikke rare at poste et svar - dels så jeg ikke skal få flere mails om at jeg skal lukke spørgsmålet, og dels fordi I vitterligt fortjener dem?
På forhånd tak for hjælpen!
Synes godt om
Ny brugerNybegynder
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.