Avatar billede mik28 Seniormester
11. maj 2010 - 17:41 Der er 9 kommentarer og
1 løsning

DOM

Hej Eksperter,

Jeg sad lige med en side som har en form med et felt der skal være focus() på onload

Jeg vil gerne vide hvad der er mest korrekt at skrive

onload="document.forms.FORMNAVN.FELTNAVN.focus()"

eller bare

onload="FELTNAVN.focus()"

Begge dele virker tilsyneladende
Avatar billede mik28 Seniormester
11. maj 2010 - 17:42 #1
Jeg har den i body tagget
Avatar billede intenz Novice
11. maj 2010 - 18:30 #2
Af de to muligheder du lister vil jeg sige den første er mest korrekt.

Men jeg ville selv vælge en 3. mulighed:
<script type="text/javascript">
window.onload = function() {
  document.forms.FORMNAVN.FELTNAVN.focus();
}
</script>
<input type="text" name="FELTNAVN" />


På den måde kan du adskille javascript delen fra din HTML kode, hvilket jeg mener er mest korrekt.
Avatar billede intenz Novice
11. maj 2010 - 18:34 #3
Jeg ville nok også vælge et sætte et ID på feltet, og så i stedet for:
document.forms.FORMNAVN.FELTNAVN.focus();

have:
document.getElementById('FELTID').focus();

Og så selvfølgelig selve elementet:
<input type="text" name="FELTNAVN" id="FELTID" />
Avatar billede softspot Forsker
11. maj 2010 - 20:17 #4
Umiddelbart fungerer de to metoder ens og skalerer lige dårligt. Valget er mest et spørgsmål om stil og orden i dine sider.

En mere korrekt metode ville være at benytte addEventListener/attachEvent (non-IE hhv. IE), som sørger for at binde event-handlers i halen på evt. eksisterende event-handlers til samme event. Jeg har ikke lige et eksempel på rede hånd, da jeg normalt benytter jQuery (som gør tingene lidt mere kompakt i denne sammenhæng).

Alternativt kunne du gøre således (dummy-metoden):

var wolUniktVarNavn = windows.onload;
window.onload = function() {
  if(wolUniktVarNavn)
    wolUniktVarNavn();
  document.forms.FORMNAVN.FELTNAVN.focus();
}

Dette vil gemme en evt. tidligere event-handler og kalde den (hvis der var en defineret) og binde en ny handler til onload som kalder den forrige og udfører det nye som skal udføres. Ulemperne ved denne metode er, at du skal bruge et globalt unikt variabelnavn til at opbevare den forrige eventhandler og så er den ikke specielt fiks...
Avatar billede olebole Juniormester
12. maj 2010 - 11:23 #5
<ole>

softspot >> Nej, grunden til, det er en dummy-metode, er, at den er forkert udført og derfor ikke vil virke - selvom den er ganske udbredt. Hvis du f.eks. har:

function foo(e) {
    var oSrc = e&&e.target ? e.target : event.srcElement;
    alert(oSrc);
}
window.onload = foo;

- vil konstruktionen ikke virke, derved at du ikke medsender argumenter ved kald af wolUniktVarNavn - og event objektet altid medsendes som argument i non-IE browsere.

Brug i stedet metoden apply:
    https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Function/apply

/mvh
</bole>
Avatar billede olebole Juniormester
12. maj 2010 - 11:29 #6
- og derudover er der ingen af eksemplerne i spørgsmålet, der vil virke  =)
Avatar billede mik28 Seniormester
12. maj 2010 - 11:44 #7
<html>
<head>
<script type="text/javascript">
window.onload = function() {
  document.getElementById('fornavn').focus()
}
</script>
</head>

<body>
<form action="" id="minform" name="minform">
Fornavn: <input type="text" id="fornavn" name="fornavn" /><br />
Efternavn: <input type="text" id="efternavn" name="efternavn" />
</form>

</body>
</html>

virker da, men hvordan skal det se ud for at være korrekt :-)
Avatar billede intenz Novice
12. maj 2010 - 12:06 #8
Det du har er korrekt. Den problemstilling de diskuterer er, hvis du vil kunne tilføje flere forskellige funktioner til onload, så de bliver kørt efter hinanden ('skalerer' som de bliver kaldt i #4).

Har du ikke behov for at køre mere end én funktion onload, er det du har skrevet 'korrekt' (afhængigt af øjnene der ser). Nogle vil måske se en 'skalerbar' onload funktion som mere korrekt. Men 'if it ain't broken, don't fix it', så hvis du ikke har behov for det, er det unødvendigt, og den du har nu er ligeså korrekt, i min mening i hvert fald.
Avatar billede mik28 Seniormester
12. maj 2010 - 12:15 #9
tak for hjælpen allesammen. Lægger I nogle svar
Avatar billede olebole Juniormester
12. maj 2010 - 12:19 #10
Enig med intenz. Til 'småting' er syntaksen i orden, men til mere komplekse ting er det en klar fordel at tilføje en eventhandler  :)

Min 'tillægskommentar' kommentar i forrige indlæg gik nu mest på, at koden i spørgsmålet er pseudokode og ikke umiddelbart vil virke
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