10. november 2004 - 09:12Der er
18 kommentarer og 1 løsning
hvorfor bruger man både minfunktion; og minfunktion()
Hvorfor bruger man f.eks. document.onkeypress=keyPress; istedet for document.onkeypress=keyPress(); ? Og når man bare kalder en funktion hedder det altid minfunktion(); ?
kunne forestille mig keyPress står for generelt alt på keyboardet... men kunne ændres til fx enter.. så vil keyPress hedde noget andet... onkeypress gemmer så på den info så den ved hvilken tast der skal reageres på.
Hermed bliver alle rettet, det er en værre gang nonsens det der :) Om det handler om JavaScript eller JScript er rystende ligegyldigt. Følgende er derfor gældende for både JavaScript og JScript:
'document.onkeydown' er en event-handler på document-objektet. Når denne handling finder sted (en tast på keyboardet aktiveres), skal den funktion, der står i den tilhørende event-handleren fyres af. Skriver du (naturligvis i script-tags):
function myAlert() { alert("Funktionen blev kaldt"); } document.onkeydown = myAlert();
Forsøger koderen at sætte event-handleren _lig med_ et funktions-kald, hvilket er noget vrøvl. Resultatet er, at JavaScript vil forsøge at udføre koderens bøn og funktionen fyres af i samme øjeblik, denne linie parses ... det var jo ikke tanken ;o)
Skriver du derimod:
function myAlert() { alert("Funktionen blev kaldt"); } document.onkeydown = myAlert;
eller:
function myAlert() { alert("Funktionen blev kaldt"); } document.onkeydown = function() { myAlert(); }
beder du JS om at lægge funktions-kaldet _i_ event-handleren. Dvs, at funktionen kaldes, hvergang handlingen (tastetryk) finder sted.
I det aller første eksempel kalder vi altså funktionen med 'myAlert()' ved forgæves at forsøge at sætte en event-handler lig med en funktion. I de to andre lægger vi en reference til funktionen 'ned i' event-handleren og sørger for, at denne kaldes, når handlingen udføres.
For at imødekomme næste spørgsmål ("... hvorfor det?"), så er det blot en 'grammatisk' definition - à la: "Hvorfor hedder det 'stille' om aftenen og 'stod' om morgenen?" "Fordi du stillede din cykel på gaden i går aftes - og den stod på gaden i morges ... og sådan er det nu engang."
Så har det altså ikke hjulpet på forståelsen ... nej, plx - du skrev det stik modsatte af, hvad du skrev :)
Du skrev: "document.onkeypress=get_funktion();
get_funktion() returnerer så en henvisning til den keyPress, som kaldes ved hvert tastetryk"
Nej ... skriver du sådan, vil funktionen blive fyret af én gang - nemlig når linien parses af JS-fortolkeren i browseren. Funktionen vil derefter _aldrig_ fyres af ... heller ikke på 'document.onkeypress' ;o)
Nå, Okay ... så forstår jeg, hvad du mener. Du har altså en funktion, der så hedder keyPress() (rigtig skidt navn til en funktion, da JS bruger samme ord).
Det kan du i pricippet godt, men det er måske lidt at gå over åen efter vand - hvorfor den da stort set heller aldrig ses brugt :)
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.