Avatar billede mik789 Nybegynder
18. januar 2003 - 11:34 Der er 7 kommentarer og
2 løsninger

eval()

Jeg sidder og eksperimenterer med Dreamweavers "Behavior" funktion, som lader én tildele events og tilsvarende handlinger til html tags.

Jeg vælger f.eks. <span>et ord</span> og vil tildele flg. ved mouseover:

this.style.cursor='help';

Resultatet er at Dreamweaver indsætter flg. javascript funktion i <head></head>:

function MM_callJS(jsStr) { //v2.0
  return eval(jsStr)
}

Og i min <span> indsættes samtidig:

onMouseOver="MM_callJS('this.style.cursor=\'help\';')"

Men dette giver javascriptfejl på siden:

'this.style' er null eller ikke et objekt

Hvorfor det? Hvad gør eval() ved tekststrengen 'this.style.cursor=\'help\';'

ps Hvis jeg dropper Dreamweaver og bare selv indsætter:

onmouseover="this.style.cursor='help';" i <span> er der ingen problemer.
Avatar billede jespernaur Nybegynder
18. januar 2003 - 13:17 #1
eval( tekststreng ) udfører indholdet af tekststreng som JavaScript kode. Dette tillader dig at opbygge noget JavaScript kode dynamisk, og derefter få det udført.
Avatar billede mik789 Nybegynder
18. januar 2003 - 13:22 #2
jesper> det forstår jeg, men hvorfor opstår der så fejl på siden?
Avatar billede jespernaur Nybegynder
18. januar 2003 - 13:34 #3
Sandsynligvis fordi referencen this er ugyldig når den anvendes oppe i MM_callJS - det der står er reelt ækvivalent med:

function MM_callJS() { //v2.0
  return this.style.cursor='help';
}

...

onMouseOver="MM_callJS();"

og derved er 'this' flået helt ud af sammenhængen.

Mvh
Jesper Naur
Avatar billede mik789 Nybegynder
18. januar 2003 - 14:57 #4
OK, det lyder rigtigt. Men hvis jeg nu godt vil have muligheden for at bruge Dreamweavers funktion, hvordan skulle den så ændres så outputtet nede i min <span> bliver som jeg ønsker: this.style.cursor='help';

Det smarte ved funktionen (bort set fra at den altså ikke virker, som den er ;-) er at man kan sette javascript erklæringerne ind i tags'ene automatisk. Hvis man så bare kunne rette funktionen til så det virker, ville det jo være smart.
Avatar billede jespernaur Nybegynder
18. januar 2003 - 15:27 #5
Nu ved jeg ikke i detaljer hvad man kan få Dreamweaver til, men problemet i det du har vist er, at referencen 'this' (som i den lokale kontekst af onMouseOver er en reference til HTML-elementet), overføres til MM_callJS som en tekststreng, og dermed er ethvert forsøg på at kunne anvende den til noget fornuftigt dømt til at mislykkes. Hvis du kan få Dreamweaver til at overføre referencen direkte, altså IKKE som tekststreng, kunne du nok lave noget ala:

function MM_callJS(elmref, code) { //v2.0
  return eval('elmref.' + code);
}

...

onMouseOver="MM_callJS(this, 'style.cursor=\'help\';');"

men nu ved jeg ikke om jeg er helt ude i skoven med hensyn til hvad man kan, og hvad du ønsker at opnå!

Mvh
Jesper Naur
Avatar billede olebole Juniormester
18. januar 2003 - 15:29 #6
<ole>

Hvis du skriver funktionen i dit dokument om, vil DW sikkert insistere på at skrive den 'rigtigt' (som DW mener, den skal se ud). Det betyder, du skal sidde og skrive den om i én uendelighed, hvis du vil teste dit dokument. Så er det lettere, selv at skrive det korrekte kald i span'et.
Det, du kan gøre, er at skrive funktionen om i selve programmet - men det kræver, du kan en del JavaScript (DW er jo i virkeligheden blot en lille kerne, der så gør brug af en masse HTML-/JavaScript-dokumenter).

/mvh
</bole>
Avatar billede mik789 Nybegynder
18. januar 2003 - 16:00 #7
begge> tak for tips. jeg kapitulerer og dropper funktionen og skriver selv værdien af onmouseover i <span>. Tak for hjælpen begge.
olebole> læg et svar, så deler I
Avatar billede olebole Juniormester
18. januar 2003 - 16:15 #8
Jeg tror, du er inde på noget rigtigt  ;o)
I øvrigt bør man kun bruge eval(), når alle andre muligheder er udtømt, da det er en meget langsom funktion.
/mvh
Avatar billede olebole Juniormester
18. januar 2003 - 16:20 #9
thnx  ;o)
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