Jag vill alltså att man _endast_ ska kunna ange det här formatet i fältet:
yyyy-mm-dd
Din kod stämmer så långt att man endast kan ange siffror, men i din kod kan man tex ange 200565, vilket inte ska tillåtas.
Det som ska ske är att man måste ange ett datum i "rätt" format, annars ska det tecken man anger suddas ut, precis som i Jojoxx exempel, fast med ett datum.
Första gången ett tecken matas in -- hur skall koden bete sig då? En siffra uppfyller ju inte formatet. Detsamma gäller samtliga tecken till dess att formatet stämmer: "2", "20", "200", "2007", "2007-", o.s.v.
Antag att ett korrekt datum matas (2007-10-06) -- vad händer om jag skrivit fel och raderar ett tecken? Formatet uppfylls inte längre.
Hur bör skriptet bete sig i ovanstående situationer?
Jag håller med om att det är bättre att validera då någon klickar på "Spara". Du kan använda följande för att validera indatat:
String.prototype.isValidDate = function()
{
function leapYear(y){ return y % 400 == 0 || (y % 4 == 0 && y % 100 != 0) }
if (!/^(\d{4})-(\d{2})-(\d{2})$/.test(this)) return false;
var y = parseInt(RegExp.$1, 10);
var m = parseInt(RegExp.$2, 10);
var d = parseInt(RegExp.$3, 10);
if (d < 1) return false;
switch (m){
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
if (d > 31) return false;
break;
case 4: case 6: case 9: case 11:
if (d > 30) return false;
break;
case 2:
if (d > 28 + leapYear(y)) return false;
break;
}
return true;
}
...
if (!document.myForm.myElement.value.isValidDate()){
alert("Ogiltigt datumformat")
}