Avatar billede mik789 Nybegynder
28. april 2002 - 18:40 Der er 17 kommentarer og
1 løsning

NS6 driller

- eller jeg driller NS6. I hvert fald kan jeg ikke forså hvorfor denne her simple lille regnemaskine ikke virker i NS6 (IE6 klarer den uden videre). NS6's javascript konsol skriver:
"regnemaskine is not defined", men det er den da i og med id="regnemaskine" i <form> - ?

Her er koden:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html>

<head>

<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
<title>Regnemaskine</title>

<script type="text/javascript">
function resizeWindow() {
  window.resizeTo(550,400);
}
function compute(form) {
  if (confirm("Har du tjekket at indtastningen er korrekt?")) {
    form.result.value=eval(form.expr.value);
  }
}
</script>

<style type="text/css">
p {
font-family:verdana;
}
#overskrift {
font-weight:bold;
}
.tekst {
font-size:10pt;
}
</style>

</head>

<body onload="resizeWindow(); regnemaskine.expr.focus();">
<p id="overskrift">Regnemaskine</p>

<p class="tekst">Skriv dit regnestykke i det f&oslash;rste felt (decimaler angives efter punktum, ikke efter komma), klik på lighedstegnet, bekr&aelig;ft at regnestykket er rigtigt, og se resultatet i det sidste felt.</p>
<p class="tekst">Brug + for addition, - for subtraktion, * for multiplikation og / for division.</p>
<p class="tekst">V&aelig;r opm&aelig;rksom p&aring; at du kan kan bruge paranteser i regnestykket og p&aring; den m&aring;de udf&oslash;re sammensatte udregninger i &eacute;n omgang.</p>

<form id="regnemaskine" action="">
<div>
<input type="text" id="expr" size="40" />
<input type="button" value=" = " onclick="compute(regnemaskine);" />
<input type="text" id="result" size="15" />
<input type="reset" value="Slet alt" onclick="regnemaskine.expr.focus();" />
</div>
</form>

</body>

</html>
Avatar billede jakoba Nybegynder
28. april 2002 - 18:58 #1
regnemaskine er navnet på et form objekt, der ligger i dokument objektet der igen ligger i window objektet.

NS kikker i window objektet og brokker sig når den ikke findes.
IE leder, på trods af alle scpe regler, videre i dokument objektet og sågar videre ind i forms objekter hvis den endnu ikke har fundet noget.

<body onload="resizeWindow(); document.regnemaskine.expr.focus();">

mvh JakobA
Avatar billede jakoba Nybegynder
28. april 2002 - 19:02 #2
Ups. ditto i linien med reset knappen. men siden den er er del af formen kan du med fordel bruge  this.form  istedet:
<input type="reset" value="Slet alt" onclick="this.form.expr.focus();" />
Avatar billede mik789 Nybegynder
28. april 2002 - 19:44 #3
jakoba> jamen når jeg skriver som du foreslår i body:

<body onload="resizeWindow(); document.regnemaskine.expr.focus();">

siger konsollen: "document.regnemaskine has no properties" og scriptet fungerer alligevel ikke
Avatar billede mik789 Nybegynder
28. april 2002 - 19:47 #4
- og IE siger til det samme: "document.regnemaskine.expr er null eller ikke et objekt"
Avatar billede jakoba Nybegynder
28. april 2002 - 20:10 #5
hmm.. prøv denneher:
http://www.jakoba.dk/eksperten/exp204309.html
der har jeg (udover ændringerne ovenfor) udvidet med name= attributter i form kommandoen og de to navngivne flter (på den måde virker det tilbage til version 4 af NS og ie)

Men onkostningen er at dokumentet ikke længere validerer som strict xhtml. Man må ikke skrive name= i en <form kommando.

mvh JakobA
Avatar billede jakoba Nybegynder
28. april 2002 - 20:14 #6
Du kan muligvis komme udenom det ved at skrive
document.forms[0].expr.focus() istedetfor, men det er gæt.

Eg GOD løsning kender jeg ikke.
Avatar billede jakoba Nybegynder
28. april 2002 - 20:20 #7
eller jo hvis bagudkompatibel er ligegyldigt kan du jo bruge DOM adressering:
  document.getElementById['expr').focus();
Avatar billede jakoba Nybegynder
28. april 2002 - 20:20 #8
ufs. [ skal være (
Avatar billede mik789 Nybegynder
28. april 2002 - 21:46 #9
getElementById kunne lade sig gøre, men det bliver da temelig klodset. Det her var hvad jeg kom frem til efter mange forsøg:

I scriptet:

function compute(form) {
  if (confirm("Har du tjekket at indtastningen er korrekt?")) {
    document.getElementById('regnemaskine').result.value=eval(document.getElementById('regnemaskine').expr.value);
  }
}

I body:

<body onload="resizeWindow(); document.getElementById('expr').focus();">

Og i formen:

<form id="regnemaskine" action="">
<div>
<input type="text" id="expr" size="40" />
<input type="button" value=" = " onclick="compute(getElementById('regnemskine'));" />
<input type="text" id="result" size="15" />
<input type="reset" value="Slet alt" onclick="getElementById('regnemaskine').expr.focus();" />
</div>
</form>

--- det lader til at xhtml giver proplemer med javascript hvis man prøver at skrive det konsekvent, eller gør js mindre tæt end det kunne være
Avatar billede mik789 Nybegynder
28. april 2002 - 21:46 #10
- men OK, nu fungerer det i begge browsere uden fejl
Avatar billede mik789 Nybegynder
28. april 2002 - 21:56 #11
og det validerer som xhtml strict (har lige tjekket)
Avatar billede jakoba Nybegynder
28. april 2002 - 23:23 #12
mik789 >> gider du check http://www.jakoba.dk/eksperten/exp204309.html
igen ned NS6.2 og evt nuere IE'er?
Jeg tror faktisk jeg har fået den både strict og bagudcompatibel nu.

mvh JakobA
Avatar billede mik789 Nybegynder
29. april 2002 - 05:56 #13
jakoba> jeps, din lommeregener kører fint her både i IE 6.02 og i NS 6.2.1.

Validatoren er også tilfreds:
"Congratulations, this document validates as XHTML 1.0 Strict!"

Men fortæl mig hvad ved din løsning der specielt løser de problemer jeg havde. Validatoren ville f.eks. ikke godtage name hos mig, men var det så bare fordi jeg havde name="..." og id="..." og ikke name='...' og id="..." som dig? ret tricky må man da sige.
Avatar billede mik789 Nybegynder
29. april 2002 - 05:57 #14
og så er jeg da ret stolt over at kunne få dig til at vågne kl.05.56 bare med tanke på at få det der irriterende script fra mik til at virke OG validere ;-)
Avatar billede mik789 Nybegynder
29. april 2002 - 05:58 #15
og hvorfor er det nødvendigt at initiere?
Avatar billede jakoba Nybegynder
29. april 2002 - 07:28 #16
Øh.. der er da dig der vågnede kl 05:56 :-)

Det er noget med den rette balance mellem steder man bruger name= og steder man ikke gør, I <form er det forbudt, i <input er det vist ikke blot tilladt, men også nødvendigt (men det er jeg endnu ikke sikker på)

Initiering er ikke nødvendig blot en vej udenom en if sætning hvergang der skal adresseres et formfelt.

Drivkraften? jae, alm nysgerrighed, men også og nok især at jeg hidtil (og i nogen grad stadig) afskyr den der "Break with the past" attitude der ligger i xhtml. Jeg synes ikke det er ligemeget at ok xhtml ikke kan ses i gamle browsere. og nu har jeg da fundet ud af at det kan lade sig gøre at skrive xhtml uden at smide fortiden væk, ihvertfald i dette tilfælde.

Selvom der stadig skal gøres noget ved 'document.forms[0]'. den slags indholdsafhængig adressering er noget skod, der må være en bedre løsning.

Tak for hjælpen.

mvh JakobA
Avatar billede mik789 Nybegynder
29. april 2002 - 14:13 #17
du kan også godt skrive OK i IE 5 (som jeg har her på arbejde). jeg må have været søvning her i morges, men jeg synes bestemt der stod 05.56 ud for dit sidste svar FØR jeg skrev mit svar. Eksperten har sine sære sider ind imellem...

Hmmn, ja mht breaking with the past, men på den anden side kan jeg godt lide bestræbelsen i xhtml på mere konsekvens og entydighed. Hvad ned name og ' eller " - betyder det noget? Du brugte første ved name og sidste ved id.
Avatar billede jakoba Nybegynder
29. april 2002 - 23:54 #18
" eller ' er helt ligemeget. blot det er det samme i begge ender.

Dejligt hvia både IE6 og IE5 kan lide den må den næste også du i IE5.5.

mvh JakobA
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