IE fryser ved submit
Jeg har en form med textfelter, som skal valideres onsubmit. Følgende felter indgår:Fakturanr. (skal udfyldes)
Fakturadato (skal udfyldes med bestemt format)
Dato1 (skal udfyldes), Timer1 (skal udfyldes)
Dato2 (valgfri), Timer2 (valgfri)
...
Dato6 (valgfri), Timer6 (valgfri)
Hvis Dato2 er udfyldt skal Timer2 også udfyldes og omvendt, osv.
Onsubmit kaldes følgende funktion:
function chkfrm(frm) {
if (frm.fakturanr.value == "") {
alert("Skriv en værdi for feltet \"Fakturanr\".");
frm.fakturanr.focus();
return false;
}
if (frm.fakturadato.value == "") {
alert("Skriv en værdi for feltet \"Fakturadato\".");
frm.fakturadato.focus();
return false;
}
if (frm.fakturadato.value.length!=10) {
alert("Datoformatet skal være: dd-mm-aaaa");
frm.fakturadato.focus();
return false;
}
if (frm.fakturadato.value.charAt(2)!="-" || frm.fakturadato.value.charAt(5)!="-") {
alert("Datoformatet skal være: dd-mm-aaaa");
frm.fakturadato.focus();
return false;
}
var tmp = 0
for (i=1; i<=6; i++) {
var dato = eval('frm.dato' + i);
var timer = eval('frm.timer' + i);
if (dato.value!="" && timer.value!="") {
tmp = 1
if (dato.value.length!=10) {
alert("Datoformatet skal være: dd-mm-aaaa");
dato.focus();
return false;
}
if (dato.value.charAt(2)!="-" || dato.value.charAt(5)!="-") {
alert("Datoformatet skal være: dd-mm-aaaa");
dato.focus();
return false;
}
var checkOK = "0123456789,";
var checkStr = timer.value;
var allValid = true;
for (i=0; i<checkStr.length; i++) {
ch = checkStr.charAt(i);
for (j=0; j<checkOK.length; j++)
if (ch == checkOK.charAt(j))
break;
if (j == checkOK.length) {
allValid = false;
break;
}
}
if (!allValid) {
alert("Værdien for \"Timer\" skal være et tal.\n\nFølgende tegn er lovlige: 0123456789,");
timer.focus();
return false;
}
}
if ((dato.value!="" && timer.value=="") || (timer.value!="" && dato.value=="")) {
if (dato.value == "") {
alert("Skriv en værdi for feltet \"Rådgivningsdato\".");
dato.focus();
return false;
}
if (dato.value.length!=10) {
alert("Datoformatet skal være: dd-mm-aaaa");
dato.focus();
return false;
}
if (dato.value.charAt(2)!="-" || dato.value.charAt(5)!="-") {
alert("Datoformatet skal være: dd-mm-aaaa");
dato.focus();
return false;
}
if (timer.value == "") {
alert("Skriv en værdi for feltet \"Timer\".");
timer.focus();
return false;
}
}
}
if (tmp==0) {
alert("Der er ikke foretaget en indberetning af timer.");
frm.dato1.focus();
return false;
}
return true;
}
Problemet er at flere brugere har klaget over at deres browser fryser i et stykke tid ved submit, og de får en prompt med beskeden om at IE kører langsom og det kan medføre problemer og påvirke input. Min fornemmelse siger mig, at det må være funktionen chkfrm(frm) der er årsagen. Men hvorfor?
Ud over at samle alle fejlmeddelser i én alert(), er der så forslag/hjælp til forbedring af scriptet?
