/ Forside / Teknologi / Udvikling / Java Scripts / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java Scripts
#NavnPoint
molokyle 5410
Klaudi 2799
smorch 2439
kim 1360
Harlekin 1134
bentjuul 984
gibson 800
severino 695
Random 675
10  konsulent.. 626
Hjælp til fejl valideringsscript for selec~
Fra : Anders Boll


Dato : 09-05-05 01:23

Hejsa...

Til trods for at jeg ikke er nogen ørn til at skrive scripts, så
er det alligevel lykkedes at frembringe et script til validering
af en selectbox. Desværre validerer scriptet ikke korrekt på alle
tider af døgnet. Det ene øjeblik validere alt som det skal, og et
kvarter efter er der fejl.

Jeg er formodning om, at fejlen ligger heromkring, kig engang:

if ((hour >= 15, minute >= 15) &&
(form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.select... osv...osv...

Scriptet kan afprøves her: www.katgrafik.dk/exp
hvor også en uddybende forklaring til valideringen findes.

Mon der er nogen som kan gennemskue fejlen, eller er det helt
håbløst?


De bedste hilsner
Anders Boll



Scriptet i sin helhed nedenfor:

<script type="text/javascript">
<!--//
function validate(form1) {
if (form1.Afhentningstidspunkt.value == "") {
alert("Du skal vælge et tidspunkt, hvornår du afhenter din
bestilling.");
form1.Afhentningstidspunkt.focus();
return false;
}

var d = new Date()
var hour = d.getHours()
var minute = d.getMinutes()

if ((hour >= 11) && (form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==1)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour >= 11, minute >= 15) &&
(form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==2)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour >= 11, minute >= 30) &&
(form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==3)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour >= 11, minute >= 45) &&
(form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==4)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour >= 12) && (form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==5)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour > 12, minute >= 15) &&
(form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==6)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour >= 12, minute >= 30) &&
(form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==7)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour >= 12, minute >= 45) &&
(form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==8)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour >= 13) && (form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==9)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour >= 13, minute >= 15) &&
(form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==10)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour >= 13, minute >= 30) &&
(form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==11)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour >= 13, minute >= 45) &&
(form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==12)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour >= 14) && (form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==13)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour >= 14, minute >= 15) &&
(form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==14)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour >= 14, minute >= 30) &&
(form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==15)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour >= 14, minute >= 45) &&
(form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==16)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour >= 15) && (form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==17)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour >= 15, minute >= 15) &&
(form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==18)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour >= 15, minute >= 30) &&
(form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==19)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour >= 15, minute >= 45) &&
(form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==20)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour >= 16) && (form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==21)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour >= 16, minute >= 15) &&
(form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==22)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour >= 16, minute >= 30) &&
(form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==23)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour >= 16, minute >= 45) &&
(form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==24)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour >= 16, minute >= 45) &&
(form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==25)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour >= 16, minute >= 45) &&
(form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==26)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour >= 17) && (form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==27)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour >= 17, minute >= 15) &&
(form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==28)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour >= 17, minute >= 30) &&
(form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==29)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour >= 17, minute >= 45) &&
(form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==30)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour >= 18) && (form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==31)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour >= 18, minute >= 15) &&
(form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==32)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour >= 18, minute >= 30) &&
(form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==33)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour >= 18, minute >= 45) &&
(form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==34)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour >= 19) && (form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==35)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour >= 19, minute >= 15) &&
(form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==36)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour >= 20) && (form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==37)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour >= 20, minute >= 15) &&
(form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==38)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour >= 20, minute >= 30) &&
(form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==39)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour >= 20, minute >= 45) &&
(form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==40)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour >= 21) && (form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==41)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour >= 21, minute >= 15) &&
(form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==42)) {
alert("Du skal vælge et senere tidspunkt");
form1.Afhentningstidspunkt.focus();
return false;
}

if ((hour >= 21, minute >= 30) &&
(form1.Afhentningsdag.selectedIndex==0) &&
(form1.Afhentningstidspunkt.selectedIndex==43)) {
alert("Der kan ikke bestilles til afhentning i dag");
form1.Afhentningstidspunkt.focus();
return false;
}

}
//-->
</script>



--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Jens Gyldenkærne Cla~ (09-05-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 09-05-05 11:01

Anders Boll skrev:

> Det ene øjeblik validere alt som det skal, og et
> kvarter efter er der fejl.

Det tyder på at dit script undersøger de forkerte ting.


[fra starten af dit script]

> var d = new Date()
> var hour = d.getHours()
> var minute = d.getMinutes()

Hvis du vil teste på servertiden, skal du ikke generere datoen med
javascript. Brug dit serversprog (asp?) til at lave en eksakt
javascript-dato (det kan godt nok give problemer hvis der går lang tid
fra siden loades til den submittes, men det er næppe det store problem i
praksis).

I resten af dit lange script tester du på nogle helt specifikke
kombinationer af hour og minute - det er næsten dømt til at gå galt.
Brug i stedet datofunktionerne i javascript til at udregne forskellen på
den aktuelle tid og den valgte tid. Du kan bruge getHours og setHours
til at lægge en time til den aktuelle tid, og den nye tid kan du så
sammenligne med den tid der er valgt i selectboksen.

--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Anders Boll (09-05-2005)
Kommentar
Fra : Anders Boll


Dato : 09-05-05 23:08

Kære Jens Gyldenkærne Clausen

> > Det ene øjeblik validere alt som det skal, og et
> > kvarter efter er der fejl.
>
> Det tyder på at dit script undersøger de forkerte ting.

Enig, men man får da vist en masse 'Alert-bokse'....

> Hvis du vil teste på servertiden, skal du ikke generere datoen med
> javascript. Brug dit serversprog (asp?) til at lave en eksakt
> javascript-dato (det kan godt nok give problemer hvis der går lang tid
> fra siden loades til den submittes, men det er næppe det store problem
i
> praksis).

Aha, nå, joh, men load/submit tiden er overvejet, og jeg tror det er
bedst sådan, da mange jo nok vil bruge en del tid efter load på at kigge
bestillingslisten (Grillmad)

> I resten af dit lange script tester du på nogle helt specifikke
> kombinationer af hour og minute - det er næsten dømt til at gå galt.

Ja, jeg blev også helt træt efter at have siddet mange timer med opgaven,
og ikke mindst i tvivl, om det nu ville virke korrekt.

> Brug i stedet datofunktionerne i javascript til at udregne forskellen

> den aktuelle tid og den valgte tid. Du kan bruge getHours og setHours
> til at lægge en time til den aktuelle tid, og den nye tid kan du så
> sammenligne med den tid der er valgt i selectboksen.

...Og her er det så kæden hopper af, og mine evner ikke rækker længere.
Som sagt... det med ørnen. Jeg har jo måttet kæmpe mig igennem indtil nu.

Så, jeg må jo prøve igen.

Du skal ihvertfald have tak så langt.

Bedste hilsner
Anders Boll

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Lasse Reichstein Nie~ (09-05-2005)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 09-05-05 20:07

Anders Boll <infonospam@katgrafik.dk> writes:

> Jeg er formodning om, at fejlen ligger heromkring, kig engang:
>
> if ((hour >= 15, minute >= 15) &&

Her er det allerede spændende. Overraskende nok er det lovligt at
have to expressions med komma imellem, men værdien af den første
blive blot smidt væk. Mener du at der skal være && imellem de to?

Ellers er ovenstående linje ækvivalent med
if (minute >= 15 &&

Jeg gætter på at du mener om hour:minute er efter 15:15, altså:
(hour > 15 || (hour == 15 && minute >= 15))

Alternativt er det meget nemmere at regne med tal end med tider,
så prøv:
var numTime = hour * 100 + minute;
og
if (numTime >= 1515 &&

> Scriptet kan afprøves her: www.katgrafik.dk/exp
> hvor også en uddybende forklaring til valideringen findes.

Men desværre er det umuligt at teste ret meget på nuværende tidspunkt,
da vi ikke kan ændre hverken indput eller server-tid.

Du kunne evt. lave en test-version hvor man også selv kan vælge
"servetiden".

> Mon der er nogen som kan gennemskue fejlen, eller er det helt
> håbløst?

> Scriptet i sin helhed nedenfor:
>
> <script type="text/javascript">
> <!--//

Den (HTML-kommentar-)linje kan godt undværes i browsere fremstillet
efter 1997.

....
> var d = new Date()
> var hour = d.getHours()
> var minute = d.getMinutes()
>
> if ((hour >= 11) && (form1.Afhentningsdag.selectedIndex==0) &&
> (form1.Afhentningstidspunkt.selectedIndex==1)) {
....
> (form1.Afhentningstidspunkt.selectedIndex==2)) {
....
> (form1.Afhentningstidspunkt.selectedIndex==3)) {
.... etc, ad infinitum.

Arrgh. Det kan gøres nemmere!
---
function validate(form1) {
var selectElem = form1.elements['Afhentningstidspunkt'];
var selectedTime = selectElem.options[selectElem.selectedIndex].value;
if (!selectedTime) {
alert("Du skal vælge hvornår du afhenter din bestilling.");
selectElem.focus();
return false;
}
var dagIndex = form1.elements['Afhentningsdag'].selectedIndex;
if (dagIndex != 0) { // dag != "I dag" valgt.
return true;
}

// value != "", har format "Kl. tt.mm"
var match = /^Kl\. (\d\d)\.(\d\d)$/.exec(selectedTime);
if (!match) { // panik, skulle ikke ske!
return false; // eller sådan noget
}

// date for selectedTime

var selHour = Number(match[1]);
var selMinutes = Number(match[2]);

var selDate = new Date();
selDate.setHours(selHour, selMinutes, 0, 0); // sætter time/min/sek/msek;

// date for mindste-tid

var delta = 30; // krav til minutter efter systemtid
if (selHour >= 17 && selHour < 20) { delta = 60; }

var limDate = new Date();
limDate.setMinutes(limDate.getMinutes() + delta); // delta efter systemtid

// sammenlign!

if (limDate.getTime() > selDate.getTime()) {
alert("Du skal vælge et senere tidspunkt");
selectElem.focus();
return false;
}
return true;
}
---

Ovenstående kan fx testes med følgende "fake form":
---
var ff = {elements:{ Afhentningsdag: {selectedIndex:0},
Afhentningstidspunkt: { focus:function(){},
selectedIndex: 1,
options:[,{value:"Kl. 21.29"}]}
}
};
alert(validate(ff));
---

For øvrigt: som kravene er skrevet, så kan man kl. 16.15 godt vælge
afhentning kl. 16.45, men ikke kl. 17.00. Overvej om det er rigtigt :)

/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'

Anders Boll (10-05-2005)
Kommentar
Fra : Anders Boll


Dato : 10-05-05 20:21

Anders Boll wrote in dk.edb.internet.webdesign.clientside:
> Hejsa...
>
> Til trods for at jeg ikke er nogen ørn til at skrive scripts, så
> er det alligevel lykkedes at frembringe et script til validering
> af en selectbox. Desværre validerer scriptet ikke korrekt på alle
> tider af døgnet. Det ene øjeblik validere alt som det skal, og et
> kvarter efter er der fejl.

...og problemet er løst med hjælp fra gruppen, ....tak!

Anders Boll

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Søg
Reklame
Statistik
Spørgsmål : 177495
Tips : 31968
Nyheder : 719565
Indlæg : 6408489
Brugere : 218886

Månedens bedste
Årets bedste
Sidste års bedste