Avatar billede humlebien Novice
02. august 2006 - 13:25 Der er 3 kommentarer og
1 løsning

Problem med dato

Jeg skal lave en formular til at oprette skoleskemaer i - og i denne vil jeg gerne have indbygget noget datocheck. Selve datokontrollen fungerer faktisk fint.... men datoen fra datofelt1 hopper med over til datofelt2, når dotofelt2 får fokus... hvad er der galt??

--- kode der laver skemaet ---
<table>
        <tr>
          <td>Lektion</td><td>Mandag</td><td>Tirsdag</td><td>Onsdag</td><td>Torsdag</td><td>Fredag</td>
        </tr>
        <tr bgcolor="#CCCCCC">
          <td>Dato</td>
          <td><input name="dato_1" type="text" tabindex="1" onKeyPress="return inputDate(event,this);" onKeyDown="if(getCharCode(event)==8)repeatRemove++;" onKeyUp="restoreVal(getCharCode(event),this);this.focus();" size="8"></td>
          <td><input name="dato_2" type="text" tabindex="6" onKeyPress="return inputDate(event,dato_2);" onKeyDown="if(getCharCode(event)==8)repeatRemove++;" onKeyUp="restoreVal(getCharCode(event),dato_2);this.focus();" size="8"></td>
          <td><input name="dato_3" type="text" tabindex="11" onKeyPress="return inputDate(event,this);" onKeyDown="if(getCharCode(event)==8)repeatRemove++;" onKeyUp="restoreVal(getCharCode(event),this);this.focus();" size="8"></td>
          <td><input name="dato_4" type="text" tabindex="16" onKeyPress="return inputDate(event,this);" onKeyDown="if(getCharCode(event)==8)repeatRemove++;" onKeyUp="restoreVal(getCharCode(event),this);this.focus();" size="8"></td>
          <td><input name="dato_5" type="text" tabindex="21" onKeyPress="return inputDate(event,this);" onKeyDown="if(getCharCode(event)==8)repeatRemove++;" onKeyUp="restoreVal(getCharCode(event),this);this.focus();" size="8"></td>
        </tr>
        <%
          tabstart = 1
          while row < 4
            response.write "<tr>"
            response.write "<td>" & skema(row,0) & "</td>"
            tabindex = tabstart
            col = 1
            while col < 6
              var = row & "_" & col
              response.write "<td><input name=lek" & var & " type=text size=8 tabindex=" & tabindex & "></td>" & vbcrlf
              tabindex = tabindex + 5
              col = col + 1
            wend
            tabstart = tabstart + 1
            row = row + 1
            response.write "</tr>"
          wend
        %>
      </table>

---- koden der checker datoerne ---
<script language="JavaScript">
var newVal="";
var newTime="";
var dd=0;
var mm=0;
var time=0;
var minut=0;
var repeatRemove=0;

function getCharCode(e){
return (e.which)?e.which:e.keyCode;1
}

function restoreVal(eC,fld){
    if (eC==8||repeatRemove>0){
        if (newVal.length>repeatRemove){
            newVal=newVal.substring(0,newVal.length-repeatRemove)
        }else{
            newVal="";
        }
    }
    repeatRemove=0;
    fld.value=newVal;
}

function inputDate(e,fld){
removeChar=false;
newVal=fld.value;
charCode = getCharCode(e);
if ((fld.value.length==2 || fld.value.length==5) && charCode==45){newVal+="-";return true;}
if (fld.value.length==10 || charCode>57 || charCode<48){
    return false;
}

newVal=fld.value+String.fromCharCode(charCode)

switch (fld.value.length){
    case 0:
        if (+newVal>3){repeatRemove++;return false;}
        break;
    case 1:
        if (+newVal>31){repeatRemove++;return false;}
        dd = +newVal;
        newVal+="-";
        break;
    case 2:
        newVal=fld.value+"-"+String.fromCharCode(charCode)
        if (charCode>49){repeatRemove++;return false;}
        break;
    case 3:
        if (charCode>49){repeatRemove++;return false;}
        break;
    case 4:
        var mm = parseInt(newVal.substring(3),10);
        if (mm==2 && dd>29 || mm>12){repeatRemove++;return false;}
        if (dd==31 && (mm==4 || mm==6 || mm==9 || mm==11)){repeatRemove++;return false;}
        newVal+="-";
        break;
    case 5:
        newVal=fld.value+"-"+String.fromCharCode(charCode)
        break;
}
newVAl ="";
return true;
}
// ****************************************************************************************************
function restoreValTime(eC,fld){
    if (eC==4||repeatRemove>0){
        if (newTime.length>repeatRemove){
            newTime=newTime.substring(0,newTime.length-repeatRemove)
        }else{
            newTime="";
        }
    }
    repeatRemove=0;
    fld.value=newTime;
}

function inputTime(e,fld){
removeChar=false;
newTime=fld.value;
charCode = getCharCode(e);
//if ((fld.value.length==2 || fld.value.length==5) && charCode==45){newVal+="-";return true;}
if (fld.value.length==5 || charCode>57 || charCode<48){
    return false;
}

newTime=fld.value+String.fromCharCode(charCode)

switch (fld.value.length){
    case 0:
        if (+newTime>2){repeatRemove++;return false;}
        break;
    case 1:
        if (+newTime>23){repeatRemove++;return false;}
        newTime+=":";
        break;
    case 2:
        newTime=fld.value+":"+String.fromCharCode(charCode)
        if (charCode>53){repeatRemove++;return false;}
        break;
    case 3:
        if (charCode>53){repeatRemove++;return false;}
        break;
    case 4:
        var minut = parseInt(newTime.substring(3),10);
        if (minut>59){repeatRemove++;return false;}
        break;
}
return true;
}
</script>
Avatar billede mclemens Nybegynder
02. august 2006 - 21:14 #1
<script language="JavaScript">
var newVal="";
var newTime="";
var dd=0;
var mm=0;
var time=0;
var minut=0;
var repeatRemove=0;




var prevfld; // tilføjet





function getCharCode(e){
return (e.which)?e.which:e.keyCode;1
}

function restoreVal(eC,fld){





  if(prevfld==fld){ // Tilføjet




    if (eC==8||repeatRemove>0){
        if (newVal.length>repeatRemove){
            newVal=newVal.substring(0,newVal.length-repeatRemove)
        }else{
            newVal="";
        }
    }
    repeatRemove=0;
    fld.value=newVal;
  }
}

function inputDate(e,fld){








prevfld=fld; //tilføjet









removeChar=false;
newVal=fld.value;
charCode = getCharCode(e);
if ((fld.value.length==2 || fld.value.length==5) && charCode==45){newVal+="-";return true;}
if (fld.value.length==10 || charCode>57 || charCode<48){
    return false;
}

newVal=fld.value+String.fromCharCode(charCode)

switch (fld.value.length){
    case 0:
        if (+newVal>3){repeatRemove++;return false;}
        break;
    case 1:
        if (+newVal>31){repeatRemove++;return false;}
        dd = +newVal;
        newVal+="-";
        break;
    case 2:
        newVal=fld.value+"-"+String.fromCharCode(charCode)
        if (charCode>49){repeatRemove++;return false;}
        break;
    case 3:
        if (charCode>49){repeatRemove++;return false;}
        break;
    case 4:
        var mm = parseInt(newVal.substring(3),10);
        if (mm==2 && dd>29 || mm>12){repeatRemove++;return false;}
        if (dd==31 && (mm==4 || mm==6 || mm==9 || mm==11)){repeatRemove++;return false;}
        newVal+="-";
        break;
    case 5:
        newVal=fld.value+"-"+String.fromCharCode(charCode)
        break;
}
newVAl ="";
return true;
}
// ****************************************************************************************************
function restoreValTime(eC,fld){
    if (eC==4||repeatRemove>0){
        if (newTime.length>repeatRemove){
            newTime=newTime.substring(0,newTime.length-repeatRemove)
        }else{
            newTime="";
        }
    }
    repeatRemove=0;
    fld.value=newTime;
}

function inputTime(e,fld){
removeChar=false;
newTime=fld.value;
charCode = getCharCode(e);
//if ((fld.value.length==2 || fld.value.length==5) && charCode==45){newVal+="-";return true;}
if (fld.value.length==5 || charCode>57 || charCode<48){
    return false;
}

newTime=fld.value+String.fromCharCode(charCode)

switch (fld.value.length){
    case 0:
        if (+newTime>2){repeatRemove++;return false;}
        break;
    case 1:
        if (+newTime>23){repeatRemove++;return false;}
        newTime+=":";
        break;
    case 2:
        newTime=fld.value+":"+String.fromCharCode(charCode)
        if (charCode>53){repeatRemove++;return false;}
        break;
    case 3:
        if (charCode>53){repeatRemove++;return false;}
        break;
    case 4:
        var minut = parseInt(newTime.substring(3),10);
        if (minut>59){repeatRemove++;return false;}
        break;
}
return true;
}
</script>
Avatar billede mclemens Nybegynder
02. august 2006 - 21:17 #2
Problemet var at ved tab skifte blev onkeyup kaldt og det resulterede i den ekstra indsættelse for at komme uden om det har jeg oprettet variablen prevfld der holder styr på det tidligere felt...

Ved hver keydown bliver denne variabel defineret til det aktive felt og så ved onkeyup checkes om prevfld svarer til det nuværende felt ... hvis ikke så har der ikke været en keydown på det pågældende felt sidst - og onkeyup på feltet skal derfor ikke udføres i funktionen restoreVal ...

- lidt dårligt forklaret, men håber det er ok :o)
Avatar billede humlebien Novice
03. august 2006 - 08:52 #3
Mange tak - det er alletiders.
Du har fortjent hvert et point :O)
Avatar billede mclemens Nybegynder
03. august 2006 - 09:08 #4
Super, og tak for mange point :o)
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