Avatar billede kuglepen Nybegynder
22. august 2006 - 10:48 Der er 18 kommentarer

document.getElementById giver en syntaks error

jeg er ved at lave en collapse/expand menu i js, og bruger er script som jeg har anvendt før. Problemet er at scriptet denne gang viser en syntaks fejl ved følgende linie:

if(document.getElementById)return(document.getElementById(toObject));

jeg fatter ingenting. Er det fordi scriptet ikke kan "se" objektets id?

hjælp, tak.
Avatar billede softspot Forsker
22. august 2006 - 10:53 #1
Det kan evt. have noget med spacing eller paranteser omkring returværdien at gøre. Prøv dette i stedet:

if(document.getElementById) return document.getElementById(toObject);
Avatar billede jokkejensen Novice
22. august 2006 - 10:57 #2
id'et skal jo også eksisterer på siden, altså dit JS skal først køres efter tagget fysisk er vist.

/JJ
Avatar billede softspot Forsker
22. august 2006 - 11:03 #3
Men det burde ikke give en syntaksfejl, at elementet ikke findes. Det vil snarere resultere i en fejl om at objektet ikke findes...
Avatar billede kuglepen Nybegynder
22. august 2006 - 11:23 #4
tak for de hurtige svar!

Men det har ikke helt hjulpet...

Jeg har denne kode, der includeres på en side:

/**
    *    print directory list as tree
    */
    function printGraphics($dirArray, $pad) {
        for($n = 0; $n <= count($dirArray); $n++) {
            $subArray = $dirArray[$n];
            if(is_array($subArray['content'])) {

                //html
                echo '<div class="menu_dir_folder" style="padding-left:' . $pad . 'px;"><img src="images/folder.png" />&nbsp;<a href="java script:showInfo(' . $n . ');">' . $subArray['name'] . '</a></div>';
                    echo '<div  id="descopen' . $n . '" style="display: none;">';
                        //recursive
                        $this->printGraphics($subArray['content'], $pad + 50);
                    echo '</div>';
            }
            else if ( $subArray['kind'] == 'file' ){
                echo '<div class="menu_dir_page" style="padding-left:' . $pad . 'px;"><img src="images/page.gif" />&nbsp;'  . $subArray['name'] . '</div>';
            }
        }
    }


På den side hvor ovenstående kode inkluderes, har jeg i <head> importeret .js filen ved:

<script type="text/javascript" src="../includes/links.js"></script>

min .js fil ser således ud:

<script type="text/javascript">

    function root(toObject) {
        if(document.getElementById) return document.getElementById(toObject);
        else if(document.all)return(eval("document.all." + toObject));
        else if(document.layers)return(eval("document." + toObject));
        else return(null);
    }

    function showInfo(descid) {
        objDescClose=root("descclose"+descid);
        /*objDescClose.style.display=(objDescClose.style.display=="none"?"block":"none");*/
        objDescOpen=root("descopen"+descid);
        objDescOpen.style.display=(objDescOpen.style.display=="none"?"block":"none");
    }

    /* image swapping function */
    function swap(imgDocID, imgObjName) {
        if(document.images[imgDocID].src == eval('img2' + ".src")) {
            document.images[imgDocID].src = eval('img1' + ".src")
        }
        else {
            document.images[imgDocID].src = eval(imgObjName + ".src");
        }
    }
</script>


det var hele skidtet... håber der er et skarpt hovede som kan se fejlen.
Avatar billede softspot Forsker
22. august 2006 - 11:54 #5
Er det stadig samme linie du får en syntaksfejl i (du har jo flere linier med samme "problem", som den linie du rettede - hvis altså det er det der er problemet)?
Avatar billede kuglepen Nybegynder
22. august 2006 - 12:03 #6
det er samme linie hver gang...
Avatar billede softspot Forsker
22. august 2006 - 12:08 #7
Kan du ikke lige prøve at ændre denne funktion:

    function root(toObject) {
        if(document.getElementById) return document.getElementById(toObject);
        else if(document.all)return(eval("document.all." + toObject));
        else if(document.layers)return(eval("document." + toObject));
        else return(null);
    }

til:

    function root(toObject) {
        if(document.getElementById) return document.getElementById(toObject);
        else if(document.all) return eval("document.all." + toObject);
        else if(document.layers) return eval("document." + toObject);
        else return null;
    }

og så også prøve at skrive den præcise tekst som browseren kommer med når den fejler...?
Avatar billede kuglepen Nybegynder
22. august 2006 - 12:22 #8
done.
resultatet er:


syntax error
links.js (line 4)
if(document.getElementById) return document.getElementById(toObject);
Avatar billede kuglepen Nybegynder
22. august 2006 - 12:24 #9
kan det ikke være fordi den ikke modtager det objekt?
Avatar billede softspot Forsker
22. august 2006 - 12:33 #10
Hmm... det burde, efter min bedste overbevisning, ikke give en syntaksfejl...

Prøv lige denne kode i stedet:

    function root(toObject) {
        if(typeof document.getElementById == "function")
            return document.getElementById(toObject);
        else if(typeof document.all != "undefined")
            return eval("document.all." + toObject);
        else if(typeof document.layers != "undefined")
            return eval("document." + toObject);
        else return null;
    }

selvom det er lidt mystisk (for mig) hvorfor din nuværende kode giver syntaksfejl...

Du kan evt. prøve at udskrive den værdi funktionen root modtager (med en alert inden du gør noget i funktionen):

    function root(toObject) {
        alert('root:toObject = ' + toObject);
        if(typeof document.getElementById == "function")
            return document.getElementById(toObject);
        else if(typeof document.all != "undefined")
            return eval("document.all." + toObject);
        else if(typeof document.layers != "undefined")
            return eval("document." + toObject);
        else return null;
    }

Hvad står der så i alert-boksen?
Avatar billede kuglepen Nybegynder
22. august 2006 - 12:42 #11
Den øverste kode giver:     

syntax error
links.js (line 4)
if(typeof document.getElementById == "function")


Den anden giver en fejl...

missing } in XML expression
links.js (line 4)
alert('root:toObject = ' + toObject);
Avatar billede olebole Juniormester
22. august 2006 - 12:53 #12
<ole>

Nu er der pludselig tale om en XML-fejl ... du må vist prøve med et link, så vi kan se, hvad du laver  ;o)

- i øvrigt er der ingen grund til at bruge 'eval', som er en af JavaScript's langsomste funktioner

/mvh
</bole>
Avatar billede kuglepen Nybegynder
22. august 2006 - 13:07 #13
Avatar billede olebole Juniormester
22. august 2006 - 13:33 #14
HTML'en gider jeg ikke sidde og bokse med, når den ikke er stillet ordentligt op. Uden linjeskift og indrykning er det ikke til at se, hvad der skal ske - og hvad der faktisk sker.

Desuden indeholder din JS-fil sære tegn. Hvilken editor bruger du - og på hvilken platform?
Avatar billede kuglepen Nybegynder
22. august 2006 - 13:43 #15
hehe, her er vist noget platformspjat. Ingen grund til at blive sur, Olebole. Jeg kører MAC og anvender en editor der hedder TextMate - jeg stiller altid min kode ordentlig op.

Men forstår godt hvor du kommer fra, uden opstilling er det håbløst. :-)
Avatar billede kuglepen Nybegynder
22. august 2006 - 13:55 #16
jeg har fået løst problemet. Jeg havde i min .js fil skrevet <script type="text/javascript"> sådan at dette blev læst to gange. Det er fy.


Dernæst ændrede jeg js filen til at se sådan ud: 
    function showInfo(descid) {
          objDiv = document.getElementById("descopen"+descid);
          objDiv.style.display=(objDiv.style.display=="none")?"block":"none";
    }

    /* image swapping function */
    function swap(imgDocID, imgObjName) {
        if(document.images[imgDocID].src == eval('img2' + ".src")) {
            document.images[imgDocID].src = eval('img1' + ".src")
        }
        else {
            document.images[imgDocID].src = eval(imgObjName + ".src");
        }
    }


Nu kører det så ikke rigtigt nogle point til jer. MEN MANGE TAK FOR JERES TID!! det er sgu super at I er så ihærdige.  Mange tak.
Avatar billede olebole Juniormester
22. august 2006 - 14:12 #17
Du må endelig ikke misforstå ... jeg er ikke det fjerneste sur. Desuden er selv gammel 'macintosse', så jeg kender udmærket problemerne med underlige tegn.
Desværre sidder jeg på en maskine, jeg ikke kan/må installere på, så jeg kunne ikke teste den i en anden editor (end Notepad) ... jeg havde jo nok på fornemmeren, du var på en anden platform  ;o)

Som sagt behøver du ikke bruge 'eval' - men jeg må indrømme disse to linjer ikke giver mening for mig:
        if(document.images[imgDocID].src == eval('img2' + ".src")) {
            document.images[imgDocID].src = eval('img1' + ".src")
        }

- hvad refererer 'img1' og 'img2' til? Jeg kan ikke se, hvor i koden du bruger funktionerne  :)
Avatar billede kuglepen Nybegynder
22. august 2006 - 14:29 #18
Det er leftovers fra et andet script. Jeg anvender det ikke endnu, men tror jeg vil have  et image på mapperne det skifter mellem minus og plus når mapperne her henholdsvis udfolder eller ikke.

endnu en gang tak.
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