Avatar billede jjdk Nybegynder
16. januar 2006 - 23:36 Der er 6 kommentarer og
1 løsning

Drop Down, vælg og valget styrer hvad du må

I fortsættelse af spørgsmål 679873 har jeg et par yderligere ønsker:
1. Når der vælges "Rengøring" i Drop Down, vil jeg gerne have kontrol på, at timer og minutter udfyldes. Minutter må kun udfyldes med 00,15,30 eller 45. Er det smartest med en Drop Down? og hvis ja, hvordan laver jeg den rigtigt?
2. Når der vælges alt anden end "Rengøring" i Drop Down, vil jeg gerne, at der ikke indtastes timer og minutter. Helst så det slet ikke kan lade sig gøre, men alternativt en kontrol på, at timer og minutter er sat til 0.

Tjek evt. siden www.vardeborg.dk/koersel/koerselsregnskab_indtastning.php
Koden ser sådan her ud nu:
<head>
<script type="text/javascript">
function checkDate(elm){
elm.value = elm.value.replace(/\//g,"-");
var d = elm.value.split("-");
if(d.length < 3){
  alert("Fejl i datoformat");
  return false;

}
var dato = new Date(d[2],d[1]-1,d[0]);
if(dato.getFullYear() != d[2] || dato.getMonth()+1 != d[1] || dato.getDate() != d[0]){
  alert("Ugyldig dato");
  return false;
}
return true;
}
function valider(f){
  if(!checkDate(f.dato)){
    f.dato.select();
    f.dato.focus();
    return false;
  }
  if(!f.antal_km.value.match(/^\d{1,3}$/)){
    alert("Kilometertal skal udfyldes med et helt tal under 1000");
    f.antal_km.select();
    f.antal_km.focus();
    return false;
  }
  if(f.formaal.value==""){
    alert("Formål skal udfyldes");
    f.formaal.select();
    f.formaal.focus();
    return false;
  }
  if(f.destination_fra.value==""){
    alert("Fra destination skal udfyldes");
    f.destination_fra.select();
    f.destination_fra.focus();
    return false;
  }
  if(f.destination_til.value==""){
    alert("Til destination skal udfyldes");
    f.destination_til.select();
    f.destination_til.focus();
    return false;
  }
return true;
}


var udfyld = [
  {"antal_km":"25","timer":"0","min":"00","formaal":"Ordinært Tilsyn","destination_fra":"Vestparken 35, Oksbøl","destination_til":"Vardeborg og retur"},
  {"antal_km":"25","timer":"0","min":"00","formaal":"Ekstraordinært Tilsyn","destination_fra":"Vestparken 35, Oksbøl","destination_til":"Vardeborg og retur"},
  {"antal_km":"25","timer":"","min":"","formaal":"Rengøring","destination_fra":"Vestparken 35, Oksbøl","destination_til":"Vardeborg og retur"},
  {"antal_km":"32","timer":"0","min":"00","formaal":"Indkøb","destination_fra":"Vestparken 35, Oksbøl","destination_til":"PC Trading, Varde"},
  {"antal_km":"","formaal":"","destination_fra":"","destination_til":""}
]
function udfyldFelter(sel){
  if(sel.selectedIndex == 0){
    alert("Du skal vælge tilsyns-type");
    return false;
  }
  var f = sel.form;
  for(x in udfyld[sel.selectedIndex-1]){
    f.elements[x].value = udfyld[sel.selectedIndex-1][x];
  }
}



window.onload = function(){
  document.forms[0].tilsynType.focus();
}
</script>
</head>

<body background="fdfbaggrund.gif">

<p><b><font face='Verdana' size='5'>Indtast Kørsel og rengøring</font></b><br><br></p>

<form action="koersel_gemmes.php" method="post" onsubmit="return valider(this);">

<table>

  <tr>
    <td>Vælg type:<br></td>
    <td><select name="tilsynType" onchange="udfyldFelter(this);">
      <option>--Vælg på listen--</option>
      <option value="ordinært">Ordinært Tilsyn</option>
      <option value="Ekstraordinært">Ekstraordinært Tilsyn</option>
      <option value="Rengøring">Rengøring</option>
      <option value="Indkøb">Indkøb PC Trading</option>
      <option value="Manuel">Manuel indtastning</option>
    </select></td>
  </tr>
  <tr>
    <td>Dato:<br></td>
    <td><input type="text" name="dato" size="10" onkeyup="val=this.value.replace(/[\/-]/g,'');if(val.match(/\d{8}/) && checkDate(this)){this.form.antal_km.focus()}else{this.focus()};"> (dd-mm-åååå)</td>
  </tr>
  <tr>
    <td>Antal kilometer:</td>
    <td><input type="text" name="antal_km" size="4" maxlength="3" onblur="if(this.value=='' && this.form.dato.value!='')this.focus();"></td>
  </tr>
  <tr>
    <td>Tid Rengøring:</td>
    <td><input type="text" name="timer" size="1" maxlength="1"> Timer <input type="text" name="min" size="2" maxlength="2">minutter (00,15,30,45)</td>
  </tr>

  <tr>
    <td>Formål med kørslen:</td>
    <td><input type="text" name="formaal" size="50"></td>
  </tr>
  <tr>
    <td>Fra destination:&nbsp;</td>
    <td><input type="text" name="destination_fra" size="50"></td>
  <tr> 
  </tr>
    <td>Til destination:&nbsp;</td>
    <td><input type="text" name="destination_til" size="50"></td>
  <tr>
    <td></td><td><input type="submit" value="Gem indtastning"></td>
  </tr>
</table>
</form>
<br><br>
<button onclick="location.href='koersel_menu.htm';return false;">Tilbage til Menu</button>
</body>
Avatar billede mm12010 Nybegynder
17. januar 2006 - 08:58 #1
tilføj denne linie i udfyldFelter:
  f.timer.disabled=f.elements['min'].disabled=sel.value!="Rengøring";
efter denne:
  var f = sel.form;

og tilføje dette til valider:
  if(!f.elements['min'].value.match(/00|15|30|45/)){
    alert("Minutter skal være 00,15,30,45");
    f.elements['min'].select();
    f.elements['min'].focus();
    return false;
  }
Avatar billede jjdk Nybegynder
17. januar 2006 - 22:17 #2
Hej og tak for dit forslag. Det virker næsten efter hensigten:
Der er bare lige om et par småting:
1. Kontrollen på om, der er indtastet noget i timer og min. fungerer ikke helt korrekt ved valg af "Rengøring". Hvis jeg blot skriver 00 í minutter og intet i timer, godkendes det alligevel.
2. Jeg har også lagt mærke til, at hvis jeg eksempelvis vælger "Ordinært tilsyn", så er timer og minutter låst korrekt. Hvis jeg så vælger "Gem Indtastning" og derefter bruger IE's tilbage-knap, så er felterne åbne for indtastning.
3. Jeg glemte lige en ting, som jeg håber, du vil hjælpe med også: Hvis jeg vælger "Ekstraordinært tilsyn", vil jeg gerne, at den sætter værdien "30" i minutter (og at felterne timer og minutter fortsat er låst). Jeg har prøvet at sætte værdien under "Var Udfyld", og det vises også rigtigt, men værdien gemmes ikke, kan jeg se på kvitterings-siden.
Avatar billede jjdk Nybegynder
17. januar 2006 - 22:52 #3
4. Jeg synes heller ikke, at kontrollen med at jeg vælger "type" øverst, virker.
Avatar billede mm12010 Nybegynder
18. januar 2006 - 14:01 #4
function valider(f){
  if(f.tilsynType.selectedIndex==0){
    f.tilsynType.focus();
    alert("Du skal vælge tilsyns-type");
    return false;
  }
  if(!checkDate(f.dato)){
    f.dato.select();
    f.dato.focus();
    return false;
  }
  if(!f.antal_km.value.match(/^\d{1,3}$/)){
    alert("Kilometertal skal udfyldes med et helt tal under 1000");
    f.antal_km.select();
    f.antal_km.focus();
    return false;
  }
  if(f.formaal.value==""){
    alert("Formål skal udfyldes");
    f.formaal.select();
    f.formaal.focus();
    return false;
  }
  if(f.destination_fra.value==""){
    alert("Fra destination skal udfyldes");
    f.destination_fra.select();
    f.destination_fra.focus();
    return false;
  }
  if(f.destination_til.value==""){
    alert("Til destination skal udfyldes");
    f.destination_til.select();
    f.destination_til.focus();
    return false;
  }
if(!f.timer.value.match(/[0-9]/)){
    alert("timer skal være et tal");
    f.timer.select();
    f.timer.focus();
    return false;
  }
if(!f.elements['min'].value.match(/00|15|30|45/)){
    alert("Minutter skal være 00,15,30,45");
    f.elements['min'].select();
    f.elements['min'].focus();
    return false;
  }
if(f.tilsynType.value=="Ekstraordinært") f.timer.disabled=f.elements['min'].disabled=false;//i denne linie fjernes if-betingelsen hvis du vil have mulighed for at hente nullerne på næste side

return true;
}
Avatar billede mm12010 Nybegynder
18. januar 2006 - 14:01 #5
function udfyldFelter(sel){
  if(sel.selectedIndex == 0){
    alert("Du skal vælge tilsyns-type");
    return false;
  }
  var f = sel.form;
  for(x in udfyld[sel.selectedIndex-1]){
    f.elements[x].value = udfyld[sel.selectedIndex-1][x];
  }
  f.timer.disabled=f.elements['min'].disabled=sel.value!="Rengøring";
}

window.onload = function(){
  if(document.forms[0].tilsynType.value!="Rengøring") document.forms[0].timer.disabled=document.forms[0].elements['min'].disabled=true;
  document.forms[0].tilsynType.focus();
}
Avatar billede jjdk Nybegynder
18. januar 2006 - 15:07 #6
Du er bare super. Nu tror jeg nok det virker efter hensigten.
Sender du et svar?
Hvis du har tid, har jeg lige en lille ting mere:
Kan jeg lave en validering på årstallet, så der ikke accepteres årstal før 2006 og efter 2008? Altså - der accepteres kun årstal i 2006 og 2007.
Under alle omstændigheder - tusind tak.
Avatar billede mm12010 Nybegynder
18. januar 2006 - 16:56 #7
velbekomme:

function checkDate(elm){
elm.value = elm.value.replace(/\//g,"-");
var d = elm.value.split("-");
if(d.length < 3){
  alert("Fejl i datoformat");
  return false;
}
var dato = new Date(d[2],d[1]-1,d[0]);
if(d[2]!="2006"&&d[2]!="2007"){
  alert("Året skal være 2006 eller 2007");
  return false;
}
if(dato.getFullYear() != d[2] || dato.getMonth()+1 != d[1] || dato.getDate() != d[0]){
  alert("Ugyldig dato");
  return false;
}
return true;
}
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