...nu skulle jag vilja validera att år, mån & dag är i rätt format (ex: 2003-04-24)....så när man flyttar sig från tex månads-rutan, så kollar den att månaderna är emellan 1-12 och att det är siffror..ska man använda onChange då? och hur flyttar man värdet i input-rutan till funktionen....
TEST:
<script language="JavaScript" type="text/javascript">
function chkMonth(pub_month){
if (isInteger (pub_month))
{
if ((pub_month < 1) || (pub_month > 12))
{
document.write ("Fel");
}
}
}
</script>
..men om jag skriver samma siffra iegn, då accepterar den det...tex: om jag skriver 1 istf 01 får jag först en varning...andra gången accepterar den det eftersom jag har "onChange"...vad kan man använda för annat för att den ska kolla varje gång...typ "LostFocus" eller nåt sånt?!
<script type="text/javascript">
<!--
function validate(o){
var n=o.name,v=o.value;
switch(true){
case n.indexOf("year")!=-1:
var y=new Date().getYear();
y=(y<1000)?y+1900:y;
if(isNaN(v)||v.length!=4||parseInt(v)>y)
alert("Felaktigt år");
break;
case n.indexOf("month")!=-1:
if(isNaN(v)||parseInt(v)<1||parseInt(v)>12)
alert("Felaktig månad");
break;
case n.indexOf("day")!=-1:
if(isNaN(v)||parseInt(v)<1||parseInt(v)>31)
alert("Felaktig dag");
break;
}
};
//-->
</script>
...
<INPUT TYPE="text" name=pub_year VALUE="" size="4" maxlength="4" onblur="validate(this)">
<INPUT TYPE="text" name=pub_month VALUE="" size="2" maxlength="2" onblur="validate(this)">
<INPUT TYPE="text" name=pub_day VALUE="" size="2" maxlength="2" onblur="validate(this)">
Det blir dock ganska irriterande med dessa varningsfönster ;) Dessutom är inte koden optimal eftersom användaren tillåts ange t.ex. 2003 | 02 | 31, vilket inte är ett korrekt datum.
Om du nu bestämmer dig för att göra ett sådant skript kan du använda dig av följande funktion för att kontrollera huruvida ett år är skottår eller ej:
function isLeapYear(n){
return (n%4==0)&&(n%100!=0)||(n%400==0);
};
alert(isLeapYear(1896)); // Ger [i]true[/i] eftersom år 1896 var ett skottår
alert(isLeapYear(2002)); // Ger [i]false[/i] eftersom år 2002 ej var ett skottår
// hålla koll på skott-år
if ((faltvardeAr % 4 == 0) \|\| (faltvardeAr % 100 == 0) \|\| (faltvardeAr % 400 == 0))
{
var skottar = 1;
}
// kollar så att man inte skriver in fel dag
if (faltvardeDag \< 1)
{
err = "Månaden kan inte ha mindre än en dag";
}
// februari koll om det är skott-år
if ((faltvardeManad == 2) && (skottar == 1) && (faltvardeDag \> 29))
{
err = "Det är skottår, d.v.s månaden har inte mer än 29 dagar";
}
// februari koll om det INTE är skott-år
if ((faltvardeManad == 2) && (skottar != 1) && (faltvardeDag \> 28))
{
err = "Det är inte skott år, d.v.s. månaden kan inte ha mer än 28 dagar";
}
// kollar de andra månaderna (31-dagars månaderna)
if ((faltvardeDag \> 31) && ((faltvardeManad == "01") \|\| (faltvardeManad == "03") \|\| (faltvardeManad == "05") \|\| (faltvardeManad == "07") \|\| (faltvardeManad == "08") \|\| (faltvardeManad == "10") \|\| (faltvardeManad == "12")))
{
err = "Månaden har inte mer än 31 dagar";
}
// kollar de andra månaderna (30-dagars månaderna)
if ((faltvardeDag \> 30) && ((faltvardeManad == "04") \|\| (faltvardeManad == "06") \|\| (faltvardeManad == "09") \|\| (faltvardeManad == "11")))
{
err = "Månaden har inte mer än 30 dagar";
}
}
.....hur ska man "konvertera" detta så att det passa Peters kod?
inte nödvändigtvis...skulle bara vilja få det att fungera så att man:
* måste skriva siffror
* måste ha 4 siffror i årtal
* måste ha 2 siffror för månad & dag
* inte kan skriva in fler dagar än det är den månaden och att skottår skall inkluderas
...om det inte blir för struligt med publikationsdatum som inte får vara större än stoppdatum, så välkomnas det med öppna armar, för mina kunskaper om javascript har tagit slut för länge sedan ;)
Det verkar konstigt. De första tre "input"-fälten är ju startdatumet och de sista tre fälten stoppdatumet. Skriver du då, t.ex. följande så bör skriptet säga ifrån:
"2002" "10" "31" - "1998" "10" "10"
Jag har dock gjort en liten ändring:
<script type="text/javascript">
<!--
function validate(o){
var
elm=o.elements,
l=elm.length-1,
m=[31,0,31,30,31,30,31,31,30,31,30,31],
d1=null,
d2=null;
for(var i=0; i < l; i++){
var e=elm[i];
if(e.name.indexOf("year")!=-1){
if(isNaN(e.value)||e.value.length!=4){
alert("Felaktigt årtal");
e.focus();
return false;
}
}
if(e.name.indexOf("month")!=-1){
if(isNaN(e.value)||e.value.length!=2||e.value<1||e.value>12){
alert("Felaktig månad");
e.focus();
return false;
}
}
if(e.name.indexOf("day")!=-1){
m[1]=isLeapYear(o[i-2].value)?29:28;
if(isNaN(e.value)||e.value.length!=2||e.value<1||e.value>m[o[i-1].value-1]){
alert("Felaktig dag");
e.focus();
return false;
}
}
}
if(new Date(o.elements[0].value+"/"+o.elements[1].value+"/"+o.elements[2].value).valueOf() > new Date(o.elements[3].value+"/"+o.elements[4].value+"/"+o.elements[5].value).valueOf()){
alert("Publikationsdatumet får ej vara större än stoppdatumet");
return false;
}
function isLeapYear(n){
return (n%4==0&&n%100!=0)||(n%400==0);
}
};
//-->
</script>
:)
274 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849