04. november 2004 - 14:34Der er
11 kommentarer og 1 løsning
Form validering text eller numeric (dynamisk antal felter i form!
Jeg har en form hvor jeg gerne vil have foretaget validering af indholdet i nogle felter.
Der er et ukendt antal tekstfelter, og til dette felt er der info om det er numerisk eller text felt. Hvis der er tale om et numerisk felt vil jeg teste at indholdet i mit tekst felt er enten tal eller '.' (punktum = komma seperator) eller er blank!
Scriptet skal bruges på lidt forskellige måder. 1: info om text/numerisk er i tekst. 2: info er i select box!
Jeg har nogle validerings funk. som jeg allerede benytter:
function validateForm(form) { if(trim(form.result_min.value) != "") { if(isPositiveInteger(form.result_min.value)==false) { alert("Please fill a valid ... using '.' as decimal seperator"); form.result.focus(); return false; } } return true; }
Problemet er i min nye form at jeg ikke kender antallet af felter på forhånd, så jeg skal på dynamisk vis have fat på antallet af felter og hvis felter skal være numerisk skal det validers...
function validateForm(f) { for (i=0; i<f.elements.length; i++) { var e = f.elements[i]; if (e.type!="text") continue; if(trim(e.value) != "") { if(isPositiveInteger(e.value)==false) { alert("Please fill a valid ... using '.' as decimal seperator"); f.result.focus(); return false; } } } return true; }
function validateForm(f) { for (i=0; i<f.elements.length; i++) { var e = f.elements[i]; if (e.type!="text") continue; if(trim(e.value) != "") { if(isPositiveInteger(e.value)==false) { alert("Please fill a valid ... using '.' as decimal seperator"); e.focus(); return false; } } } return true; }
Det ligner noget af det rigtige, men dog mangler et vigtigt element: Validering på de enkelte tekst felter skal gøres afhængig af valget som er gjort i select'en..
psuedo kode:
for (antallet af elemener på siden) { if(elementnavn='result_min' || 'result_max') { var nummer = result_min.substring(sidste index af '_', til længde af streng) //find det nummer feltet har fået af mig (navn = result_min_6) var type = find type fra select box, som har navn/id 'result_type'+nummer //(navn = result_type_6)
if(type == 'numeric') { if(trim(e.value) != "") { if(isPositiveInteger(e.value)==false) { alert("Please fill a valid ... using '.' as decimal seperator"); e.focus(); return false; } } } return true; } return true; }
-----------------------
Det var noget i den stil jeg havde forestillet mig, håber det er til at forstå!!!
function validate(f){ var s = f.getElementsByTagName('SELECT'),val,id,flt; for(i=0;s.length>i;i++){ val = +s[i].value; id = s[i].name.replace(/^\.*?(\d+)$/,"$1") flt = f.elements['resultat_min_'+id); if(+flt.value > val){ alert('Værdien er mindre end minimum'); flt.focus(); return false; } flt = f.elements['resultat_max_'+id); if(+flt.value < val){ alert('Værdien er større end maximum'); flt.focus(); return false; } } retrun true; }
Jeg har forsøgt at rette dem men ikke, med den store success! Der var en stavefejl i return samt ikke-kantede paranteser i linien flt = f.element....
Fejlen der meddeles er: Linie 29 char 8 Error: Expected ';' code: 0
function validateForm(f){ var s[] = f.getElementsByTagName('SELECT'),val,id,flt; for(i=0;s.length>i;i++){ val = +s[i].value; id = s[i].name.replace(/^\.*?(\d+)$/,"$1"); flt = f.elements['resultat_min_'+id];
if(+flt.value > val){ alert('Værdien er mindre end minimum'); flt.focus(); return false; } flt = f.elements['resultat_max_'+id); if(+flt.value < val){ alert('Værdien er større end maximum'); flt.focus(); return false; } } return false; }
OBS: Det jeg skal teste på er om vædien af select-box er text eller numerisk Hvis det er numerisk, skal jeg sikre mig at der kun står tal i tekstfeltet. Det er underordnet om resultatet er imellem 2 værdier.
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.