22. juli 2003 - 11:53Der er
13 kommentarer og 1 løsning
Dynamisk validering af form
Hej
Jeg har en form, som skabes dynamisk ud fra data i en database. Det vil sige at jeg har x antal rækker i en tabel, hvor hver række har de samme form felter. Jeg skal så validere at det er de rigtige data der står i felterne... på hver linie...
hvordan i alverdenen gør man det i JS? Min tanke var noget lignende nedenstående... men det virker ikke helt :o)
Nogle ideer?
for(int i = 0; i < 10; i++) {
if((isNaN(document.forms[0].no+i.value)) && (error==0)) { alert('Feltet Nummer nr. i række ' + i +' skal indeholde en talværdi'); document.forms[0].no+i.select(); }
Det her eksempel kører jo så i 10 rækker... hvor det tjekker om feltet no kun har tal... I det endelige script skal der testes på flere felter, men det er jo irrelevant for princippet!
Ja, det er selvfølgelig en mulighed, men du får genereret en masse kode på den måde. Jeg bliver nødt til at tage højde for hastigheden da jeg får mange brugere, og mange rækker der skal valideres. Det var derfor jeg gerne ville køre det i den samme løkke.
Men helt sikkert en mulighed, hvis jeg ikke kan finde en anden løsning
Kom lige i tanke om at du må kunne bruge noget som "check all" og "uncheck all"
Eks fundet på nettet.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html> <head> <title>Untitled</title> </head>
<body> <form name="frmSample" method="post" action="#" onSubmit="return ValidateForm(this,'chkSample')"> <div align="left"> <input type='submit' name='' value='Delete Records'> <a href="java script:SetChecked(1,'chkSample')"><font face="Arial, Helvetica, sans-serif" size="2">Check All</font></a> <a href="java script:SetChecked(0,'chkSample')"><font face="Arial, Helvetica, sans-serif" size="2">Clear All</font></a></div><br><br> <!--your dynamic table contents comes here (change the name chkSample everywhere if you want to) --> <input type="checkbox" name="chkSample" value="A"> A <br> <input type="checkbox" name="chkSample" value="B"> B <br> <input type="checkbox" name="chkSample" value="C"> C <br> <input type="checkbox" name="chkSample" value="d"> d <br> </form>
<script language=javascript> var form = 'frmSample'; function SetChecked(val,chkName) { dml=document.forms[form]; len = dml.elements.length; var i=0; for( i=0 ; i<len ; i++) { if (dml.elements[i].name==chkName) { dml.elements[i].checked=val; } } }
function ValidateForm(dml,chkName){ len = dml.elements.length; var i=0; for( i=0 ; i<len ; i++) { if ((dml.elements[i].name==chkName) && (dml.elements[i].checked==1)) return true } alert("Please select at least one record to be deleted") return false; } // --> </script>
Men... skal der ikke et check af blanke felter på ?? if (frm.elements[i].type == "text" && isNaN(frm.elements[i].value) || (frm.elements[i].value.length < 1)) {
Det er noget i den retning jeg er efter - problemet er jo selvfølgelig bare at det ikke er alle felterne der skal udsættes for den samme validering
Felterne i min form har navne alt efter hvilken række de ligger i - f.eks feltet no hedder no0 i række 1 osv. Det er derfor jeg gerne vil have en løkke til at køre én gang for hver række - men det kan godt være at det ikke er muligt.
Måske kunne du også tage udgangspunktet i dit eget (har ikke testet nogetsomhelst !-)
for(i=0;i<10;i++){ felt = eval('document.forms[0].no'+i); if((isNaN(felt.value)) && (error==0)) { alert('Feltet Nummer nr. i række ' + i +' skal indeholde en talværdi'); felt.focus(); felt.select(); }
Jeg har fået løst problemet. Hele funktionen er herunder, i sin endelige form.
function validateInsertPlacering(myForm) { myArray = new Array(1, 2, 4);
var i = 0; var error = 0;
while(i<myForm.length-4) {
for (var x = 0; x < 3; x++) { var index = i + myArray[x]; if((isNaN(myForm.elements[index].value)) && (error==0)) { raekke = (i / 6) +1; alert('Der er fundet en fejl i række ' + raekke + ' - feltet skal indeholde en talværdi'); myForm.elements[index].select(); error = 1;
Som en lille kommentar, så kan man kigge på det første kodeeksempel, der afslører at jeg absolut ikke er til Javascript, men lidt mere andre programmeringssprog - sidste gang jeg kiggede efter var der nemlig ikke noget der hed 'int' i JS... det tog mig et stykke tid før jeg fandt den fejl!
Synes godt om
Slettet bruger
23. juli 2003 - 12:30#14
Svar. Men du er velkommen til også at dele ud til de andre! :)
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.