Avatar billede themapplz Nybegynder
15. januar 2007 - 14:18 Der er 2 kommentarer og
1 løsning

onchange opdatering

Hej Alle -

Jeg har et problem med min onchange handler.
Jeg har 4 dropdowns - fra kl.time, kvarter og til kl. time, kvarter
Ved hver dropdown har jeg et script, der kalkulerer antallet af timer, der er fra 'fra' til 'til'.
Endvidere, hvis 'fra' kl. er højere end 'til' (f.eks. fra kl. 23.30 til kl. 08.30) skal den lægge 24 til resutatet.
Der sker så bare det, at onchange handleren ikke opdaterer mit resultat... nogen der kan gennemskue hvorfor? Jeg har prøvet i mac/safari og mac/firefox og det er det samme begge steder..jeg ved kunden bruger pc, så det kan være det er en platformsting..?

Min javascript kode ser således ud:
_______________________
<body>
<SCRIPT TYPE="text/javascript">
function compute( form ) {

if(form.frahalv.value == ".99"){
form.frahalv.value = 1;
}
if((form.frakl.value+form.frahalv.value) > (form.tilkl.value+form.tilhalv.value)){
form.timer.value = eval(form.tilkl.value+form.tilhalv.value)-(form.frakl.value+form.frahalv.value)+24;
}
else {
form.timer.value = eval(form.tilkl.value+form.tilhalv.value)-(form.frakl.value+form.frahalv.value);
}
}
</SCRIPT>
_______________________

og min html kode:
_______________________
<tr>
          <td>&nbsp;</td>
          <td height="30"><font size="2">Fra:</font></td>
          <td colspan="2"><select name='frakl' id="frakl" onChange="compute( this.form )">
              <option value="" selected>Time</option>
              <?php
          for ($c = 0; $c <= 23; $c++) {
          if($c < 10){$c = "0".$c;
          }
                                    echo "<option value=\"$c\"";
                                    if($Submit && $frakl == $c){echo " selected";}
                                    echo ">$c</option>\n";
                                    }
            ?>
            </select>
              <select name='frahalv' onChange="compute( this.form )">
                <option value="" selected>Kvarter</option>
                <option value=".25"<?php if($Submit && $frahalv == ".25"){echo " selected";}?>>.15</option>
                <option value=".50"<?php if($Submit && $frahalv == ".50"){echo " selected";}?>>.30</option>
                <option value=".75"<?php if($Submit && $frahalv == ".75"){echo " selected";}?>>.45</option>
                <option value=".99"<?php if($Submit && $frahalv == ".99"){echo " selected";}?>>.59</option>
            </select></td>
        </tr>
        <tr>
          <td>&nbsp;</td>
          <td height="30"><font size="2">Til:</font></td>
          <td colspan="2"><select name='tilkl' id="tilkl" onChange="compute( this.form )">
              <option value="" selected>Time</option>
              <?php
          for ($c = 0; $c <= 23; $c++) {
          if($c < 10){$c = "0".$c;
          }
                                    echo "<option value=\"$c\"";
                                    if($Submit && $tilkl == $c){echo " selected";}
                                    echo ">$c</option>\n";
                                    }
            ?>
            </select>
              <select name='tilhalv' id="tilhalv" onChange="compute( this.form )">
                <option value="" selected>Kvarter</option>
                <option value=".25"<?php if($Submit && $tilhalv == ".25"){echo " selected";}?>>.15</option>
                <option value=".50"<?php if($Submit && $tilhalv == ".50"){echo " selected";}?>>.30</option>
                <option value=".75"<?php if($Submit && $tilhalv == ".75"){echo " selected";}?>>.45</option>
            </select></td>
        </tr>
_______________________
- jeg har endda prøvet at lave en compute() via onSubmit, men der gør heller ingen forskel..

Håber du kan hjælpe!!

Mange hilsner fra Frederiksberg,
Andreas
Avatar billede roenving Novice
16. januar 2007 - 01:08 #1
Brug ikke reserverede ord, da du nemt forvirrer browserens javascript-maskine, så undlad at bruge ordet "form" i funktionen, erstat det f.eks. med "f" ...

-- og den fejl, det lykkedes mig at få, var baseret på, at jeg havde values uden foranstående nuller (1, 2 osv. og ikke 01, 02), men det er ikke utænkeligt, at den også kommer selv om der er foranstående nuller !-)

-- men skriv f.eks. scriptet sådan:

<script type="text/javascript">
function compute( f ) {
  if(+(f.frakl.value+f.frahalv.value) > +(f.tilkl.value+f.tilhalv.value)){
    f.timer.value = +(f.tilkl.value+f.tilhalv.value)-(f.frakl.value+f.frahalv.value)+24;
  }else {
    f.timer.value = +(f.tilkl.value+f.tilhalv.value)-(f.frakl.value+f.frahalv.value);
  }
}
</script>

-- så skulle den virke upåklageligt !o]

-- ovenikøbet starter den så ikke med en fejl, når der vælges første gang ...

-- i øvrigt ville jeg så lave kvarter-selects med 00, altså:

              <select name='tilhalv' id="tilhalv" onChange="compute( this.form )">
                <option value="" selected>Kvarter</option>
                <option value=".00">.00</option>
                <option value=".25">.15</option>
                <option value=".50">.30</option>
                <option value=".75">.45</option>
            </select></td>
Avatar billede themapplz Nybegynder
16. januar 2007 - 02:39 #2
Det virker perfekt! Mange tak!
Avatar billede roenving Novice
16. januar 2007 - 02:42 #3
Velbekomme '-)
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