Discussion:
Javascript "is not defined"
(for gammel til at besvare)
scootergrisen
2013-05-31 21:05:34 UTC
Permalink
Spørgsmål : Hvis man inkluder en javascript fil i en HTML fil i <head>
delen med en funktion kan man så ikke bare kalde den i <body> uden at
skulle vente på siden er indlæst eller sådan noget ?

Jeg får nogen sjældne gange denne fejl : "Uncaught ReferenceError: noget
is not defined"

Det er sjældent det sker men det sker.

<head>

<!-- javascript.js har noget() funktionen -->
<script type="text/javascript" src="javascript.js"></script>

</head>

<body>

<script type="text/javascript">noget();</script>

</body>
Karl Erik Christensen
2013-05-31 22:03:41 UTC
Permalink
Post by scootergrisen
Spørgsmål : Hvis man inkluder en javascript fil i en HTML fil i <head>
delen med en funktion kan man så ikke bare kalde den i <body> uden at
skulle vente på siden er indlæst eller sådan noget ?
Jeg får nogen sjældne gange denne fejl : "Uncaught ReferenceError: noget
is not defined"
Det er sjældent det sker men det sker.
<head>
<!-- javascript.js har noget() funktionen -->
<script type="text/javascript" src="javascript.js"></script>
</head>
<body>
<script type="text/javascript">noget();</script>
</body>
Sikkert derfor at nogen engang fandt på, at kaldet til JS placeres lige
før </body>.

Hvis scriptet giver output, kan du lave en placeholder længere oppe i
koden - der hvor du ønsker resultatet skal vises.

Karl Erik.
--
http://dmwebdesign.dk/karlerik/
scootergrisen
2013-05-31 23:14:14 UTC
Permalink
Post by Karl Erik Christensen
Sikkert derfor at nogen engang fandt på, at kaldet til JS placeres lige
før </body>.
Hvis scriptet giver output, kan du lave en placeholder længere oppe i
koden - der hvor du ønsker resultatet skal vises.
Karl Erik.
Jeg bruger document.write() i funktionen.

Men når fejlen er "funktionsnavn is not defined" så må det vel være
fordi javascript.js filen med funktionen ikke nåede at blive indlæst
eller sådan noget. Det vel ikke på grund af document.write() fordi
funktionen findes slet ikke.

Tænker på om det kunne være fordi der er nogle af mine gamle brugere der
har besøgt min side før og har en gammel version af javascript.js i
deres cache hvor funktionsnavnet var anderledes.
Det kunne måske forklare hvorfor fejlen kun kommer sjældent.
Birger Sørensen
2013-06-01 06:44:14 UTC
Permalink
Post by scootergrisen
Post by Karl Erik Christensen
Sikkert derfor at nogen engang fandt på, at kaldet til JS placeres lige
før </body>.
Hvis scriptet giver output, kan du lave en placeholder længere oppe i
koden - der hvor du ønsker resultatet skal vises.
Karl Erik.
Jeg bruger document.write() i funktionen.
Men når fejlen er "funktionsnavn is not defined" så må det vel være
fordi javascript.js filen med funktionen ikke nåede at blive indlæst
eller sådan noget. Det vel ikke på grund af document.write() fordi funktionen
findes slet ikke.
Tænker på om det kunne være fordi der er nogle af mine gamle brugere der
har besøgt min side før og har en gammel version af javascript.js i
deres cache hvor funktionsnavnet var anderledes.
Det kunne måske forklare hvorfor fejlen kun kommer sjældent.
funktioner, der bruger document.write, og funktioner der refererer til
andre elementer, skal kaldes i onload på enten body eller window.
Der skal ikke være js - hverken koder eller kald - i body.

Birger
--
http://varmeretter.dk - billig, sund og hurtig mad
Utils http://sdccms.dk/ordbog/ http://sdccms.dk/mailfriend/
http://bredelund.dk CMS som det var meningen et sådant skulle være
Arne Ingolf
2013-06-01 08:43:05 UTC
Permalink
Post by Birger Sørensen
funktioner, der bruger document.write, og funktioner der refererer til
andre elementer, skal kaldes i onload på enten body eller window.
Der skal ikke være js - hverken koder eller kald - i body.
Tror ikke der er nogen, som bruger document.write mere, det er videst
ikke med i standarden i hvert fald.

Det andet er rigtigt, men det skaber problemer, i og med, du skal lave
et cross browser script, som detekterer, hvornår onload er fired
(eller måske senere).

Du kan undgå et sådant script ved at lægge javascript-koden sidst i
body, da du så er helt sikker på, at alt andet er indlæst. Det er på
ingen måde kønt, men det virker.

Google har adskillige Youtube-videoer om, hvordan man henter script
ind efter at siden er indlæst, så man følger den korrekte måde, som
Birger skriver om. Ingen grund til selv at opfinde noget.


MVH
Rune Jensen
Arne Ingolf
2013-06-01 09:01:25 UTC
Permalink
Post by Arne Ingolf
Tror ikke der er nogen, som bruger document.write mere, det er videst
ikke med i standarden i hvert fald.
Den nye standard, altså.


MVH
Rune Jensen
Birger Sørensen
2013-06-01 09:14:24 UTC
Permalink
Arne Ingolf udtrykte præcist:
8X
Post by Arne Ingolf
Det andet er rigtigt, men det skaber problemer, i og med, du skal lave
et cross browser script, som detekterer, hvornår onload er fired
(eller måske senere).
8X

Brug det her:

----- js -----
SetEvent(window, 'load', InitWhatever);

function SetEvent(elm, evt, fnc) { // event handlere på elementer
if (elm) {
if (elm.addEventListener) { // for rigtige browsere
elm.addEventListener(evt, fnc, false);
}
else if (elm.attachEvent) { // for IE
elm.attachEvent('on'+evt, fnc);
}
}
}

function InitWhatever() {
// Her er din kode,
// der kan bruge document.write og
// adressere andre elementer i DOM.
}
----- js -----

Har ikke mødt en browser, det ikke virker i endnu.
Og så er det i øvrigt unobtrusive, og den rigtige måde at gøre det på,
i stedet for at rode kode og indhold sammen.
(Indhold i HTML, præsentation i css og functionalitet i scripting)
Så der er ingen grund til at gøre det vanskeligere ned det er - eller
at afskrække folk fra at gøre tingene rigtigt, fordi man mener det er
for vanskeligt.

Birger
--
http://varmeretter.dk - billig, sund og hurtig mad
Utils http://sdccms.dk/ordbog/ http://sdccms.dk/mailfriend/
http://bredelund.dk CMS som det var meningen et sådant skulle være
r***@hotmail.com
2013-06-01 09:10:02 UTC
Permalink
Post by Birger Sørensen
funktioner, der bruger document.write, og funktioner der refererer til
andre elementer, skal kaldes i onload på enten body eller window.
Der skal ikke være js - hverken koder eller kald - i body.
Tror ikke der er nogen, som bruger document.write mere, det er videst
ikke med i standarden i hvert fald.

Det andet er rigtigt, men det skaber problemer, i og med, du skal
lave
et cross browser script, som detekterer, hvornår onload er fired
(eller måske senere).

Du kan undgå et sådant script ved at lægge javascript-koden sidst i
body, da du så er helt sikker på, at alt andet er indlæst. Det er på
ingen måde kønt, men det virker.

Google har adskillige Youtube-videoer om, hvordan man henter script
ind efter at siden er indlæst, så man følger den korrekte måde, som
Birger skriver om. Ingen grund til selv at opfinde noget.


MVH
Rune Jensen
scootergrisen
2013-06-05 18:08:42 UTC
Permalink
Nå nu kan jeg se at jeg stadig får is not defined fejlbeskeder selvom
jeg har lavet om på koden får jeg stadig fejl fra den gamle kode.
Så det er åbenbart fordi der er nogen der har en gammel cache version af
HTML koden som prøver og bruge noget af den gamle Javascript kode.
Birger Sørensen
2013-06-05 18:25:42 UTC
Permalink
Nå nu kan jeg se at jeg stadig får is not defined fejlbeskeder selvom jeg har
lavet om på koden får jeg stadig fejl fra den gamle kode.
Så det er åbenbart fordi der er nogen der har en gammel cache version af HTML
koden som prøver og bruge noget af den gamle Javascript kode.
Muligvis.
Afhænger selvfølgelig af, om du har lavet koden om til det rigtige...

Birger
--
http://varmeretter.dk - billig, sund og hurtig mad
Utils http://sdccms.dk/ordbog/ http://sdccms.dk/mailfriend/
http://bredelund.dk CMS som det var meningen et sådant skulle være
Loading...