reg = /^\d{8}$/; reg2 = /^\d{2} \d{2} \d{2} \d{2}$/; reg3 = /^\d{4} \d{4}$/; if (!(thisform.FELTNAVN.value.match(reg) || thisform.FELTNAVN.value.match(reg2) || thisform.FELTNAVN.value.match(reg3)) { intError = 1; strError += "- xxx skal være et telefonnummer!\n"; thisform.FELTNAVN.focus(); }
Check for radio-buttons:
f = false; for (i = 0; i < thisform.RADIONAVN.length; i++) if (thisform.RADIONAVN[i].checked) { f = true; break; } if (!f) { intError = 1; strError += "- xxx skal være valgt!\n"; thisform.RADIONAVN[0].focus(); }
Checkbutton skal være valgt:
if (!thisform.CHECKNAVN.checked) { intError = 1; strError += "- xxx skal være valgt!\n"; thisform.CHECKNAVN.focus(); }
Synes godt om
Slettet bruger
12. august 2002 - 18:33#3
Telefonnummer tjekket skal se således ud:
reg = /^\d{8}$/; reg2 = /^\d{2} \d{2} \d{2} \d{2}$/; reg3 = /^\d{4} \d{4}$/; if (!(thisform.FELTNAVN.value.match(reg) || thisform.FELTNAVN.value.match(reg2) || thisform.FELTNAVN.value.match(reg3))) { intError = 1; strError += "- xxx skal være et telefonnummer!\n"; thisform.FELTNAVN.focus(); }
I tager begge to udgangspunkt i at jeg kender feltnavnene. Og at der kun er et felt der f.eks. tjekkes for 5 karakterer. Men problemet er at felterne genereres dynamisk (asp) og derfor vil jeg gerne kalde funktionen med feltets navn i onsubmit eventen.
Derfor har jeg f.eks. lavet et tjek for 8 karakterer således:
function val8(str) { if (str.length < 8) { alert("Du skal minimum skrive 8 karakterer"); return false; } } Så har jeg kaldt funktionen med return val8(document.formnavn.feltnavn.value);
Jeg kan ikke omskrive det så det passer ind i mit kram.
Synes godt om
Slettet bruger
13. august 2002 - 14:27#11
Du kan evt. gøre dette:
function valRadio(rad) { f = false; for (i = 0; i < rad.length; i++) if (rad[i].checked) { f = true; break; } if (!f) { alert("Du skal vælge en radio-button!"); return false; } return true; }
Det kaldes med:
onSubmit="return valRadio(this.radioNavn);"
Forøvrigt er det ulovligt ifølge HTML-standarden ikke at angive en radio-button som default checked.
Der sker det samme som med mit forsøg. Fejl: "Objektet understøtter ikke denne egenskab eller metode." Fejl i linien: "f = false;"
Synes godt om
Slettet bruger
13. august 2002 - 14:46#14
Smid et link. Der kan umuligt være noget galt i den linje. Prøv evt. dette:
function valRadio(rad) { f = false; for (i = 0; i < rad.length; i++) { if (rad[i].checked) { f = true; break; } } if (!f) { alert("Du skal vælge en radio-button!"); return false; } return true; }
Jeg kan stadig ikke få validering til mere end et felt til at virke har prøvet med denne uden held:
function validateForm(thisform) {
strError = 'Der opstod følgende fejl:\n\n'; intError = 0;
if (thisform.Te41.length < 2) { intError = 1; strError = strError + '- xxx skal udfyldes\n' } else if (thisform.Te42.length < 2) { intError = 1; strError = strError + '- xxx skal udfyldes\n' }
if (intError > 0) { alert(strError) return false; } else { return true // OK, formen må submittes } }
Synes godt om
Slettet bruger
14. august 2002 - 15:47#20
Jeg forstår ikke, hvad du mener i tilfældet med manden og p-pillerne!
Hvis du bare vil validere på to felter som ovenstående, så er det meget nemmere at gøre således (keysersoze's forslag virker kun, hvis du vil alerte ALLE fejl på én gang):
function valider(frm) { if (frm.Te41.length < 2) { alert("Te41 skal være mere end 1 karaktér lang!"); return false; } if (frm.Te42.length < 2) { alert("Te42 skal være mere end 1 karaktér lang!"); return false; } return true; }
<HTML> <HEAD> <script> function valider(frm) { if (frm.Te41.length < 2) { alert("Te41 skal være mere end 1 karaktér lang!"); return false; } if (frm.Te42.length < 2) { alert("Te42 skal være mere end 1 karaktér lang!"); return false; } return true; } </script> </HEAD> <BODY bgcolor="#B7C888"> <form method="post" action="mf.asp?mode=test" name="mf" Onsubmit="return valider(this)"> <input type="text" name="Te41"> <input type="text" name="Te42"> <input type="submit" Value="Stem"> </form> </BODY> </HTML>
Synes godt om
Slettet bruger
16. august 2002 - 16:07#24
Der mangler selvfølgelig at stå value:
function valider(frm) { if (frm.Te41.value.length < 2) { alert("Te41 skal være mere end 1 karaktér lang!"); return false; } if (frm.Te42.value.length < 2) { alert("Te42 skal være mere end 1 karaktér lang!"); return false; } return true; }
Synes godt om
Slettet bruger
16. august 2002 - 16:08#25
P.S. "Onsubmit" skal enten staves "onSubmit" eller "onsubmit". Alt andet er imod standarderne!
Synes godt om
Slettet bruger
16. august 2002 - 17:08#26
Det er der da vist ikke noget krav om. Men det er programmeringsmæssigt smukkere at se på.
Smid lige et link hvis jeg tager fejl :)
Synes godt om
Slettet bruger
16. august 2002 - 17:10#27
HTML tillader selvfølgelig alskens fejl, men i javascript skal eventhandlere skrives korrekt. Og det er altså korrekt, som jeg siger! :)
Hvorfor submitter formen selvom der alertes ved en fejl her?
function valider() { if (document.EZForm.Te44.value.length < 1) { alert("Du har glemt at udfylde feltet"+'Textinput'); return false; }
if(!document.EZForm.Te45.value.match(/^[\w]{1}[\w\.\-_]*@[\w]{1}[\w\-_\.]*\.[\w]{2,6}$/i)) { alert("Der er fejl i email adressen"+'Email'); return false; }
f = false; for (i = 0; i < document.EZForm.Ra46.length; i++) { if (document.EZForm.Ra46[i].checked) { f = true; break; } } if (!f) { alert("Du skal vælge en svarmulighed"+'Radios'); return false; }
"Desuden ønsker jeg en funktion der kan validere at man f.eks. vælger "Mand" i en radiobutton option og senere derfor ikke kan vælge at han bruger p-piller i en anden radiobutton."
Synes godt om
Slettet bruger
17. august 2002 - 12:51#31
Som sagt forstår jeg ikke, hvad du mener med den sætning.
Kan du som det sidste ikke også lige vise hvordan man indsætter denne funktion i "vores" valider() funktion. Altså så det omskrives det if sætninger inden i valider() i stedet for 3-4 funktioner.
function validateDate(d) { if(d.length!=6) return false;
var daysInMonth = Array(0,31,28,31,30,31,30,31,31,30,31,30,31); var day = parseInt(d.substr(0,2),10); var month = parseInt(d.substr(2,2),10); var year = parseInt(d.substr(4,2),10);
if(year < 0) return false;
if(isLeapYear(year)) daysInMOnth[2] = 29;
if(month < 1 || month > 12) return false;
if(day < 1 || day > daysInMonth[month]) return false;
return true; }
function validateCPR(cpr) { // requires: cpr no - format: DDMMYYCCCC // CCCC: control digits
if(cpr.length!=10) return false;
var d = cpr.substr(0,6);
if(!validateDate(d)) return false;
var w = 4*parseInt(cpr.substr(0,1),10) +3*parseInt(cpr.substr(1,1),10) +2*parseInt(cpr.substr(2,1),10) +7*parseInt(cpr.substr(3,1),10) +6*parseInt(cpr.substr(4,1),10) +5*parseInt(cpr.substr(5,1),10) +4*parseInt(cpr.substr(6,1),10) +3*parseInt(cpr.substr(7,1),10) +2*parseInt(cpr.substr(8,1),10) +parseInt(cpr.substr(9,1),10);
if(w%11!=0) return false;
return true; }
function val1(str1,spm1) { if (!validateCPR(str1)) { window.event.returnValue = false; window.event.cancelBubble = true; alert("CPR-Nummer ikke validt"+spm1); } }
Synes godt om
Slettet bruger
19. august 2002 - 16:52#35
Mht. til den med p-piller, så kan du gøre således:
for (i = 0; i < document.EZForm.koen.length; i++) if (document.EZForm.koen[i].checked) { val1 = document.EZForm.koen[i].value; break; } for (i = 0; i < document.EZForm.ppiller.length; i++) if (document.EZForm.ppiller[i].checked) { val2 = document.EZForm.ppiller[i].value; break; } if (val1 == "Mand" && val2 == "Ja") { alert("Bla!"); //Formen skal IKKE submittes! }
Hvad er der galt i at have valideringen i forskellige funktioner?
Synes godt om
Ny brugerNybegynder
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.