Avatar billede kelmek Nybegynder
22. juli 2003 - 11:53 Der 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!

på forhånd tak!
Avatar billede dk_akj Nybegynder
22. juli 2003 - 12:09 #1
Jeg plejer at oprettet mit javascript til validering dynamisk.

I asp:

response.write "<form....>"
for i = 1 to antal
  response.write "<input type=text...... name=input_" & i>
next

response.write "<script language=javascript>"
for i = 1 to antal
  response.write // kode for check af felt "i" & vbcrlf
next
response.write "</script>"

//akj
Avatar billede kelmek Nybegynder
22. juli 2003 - 12:14 #2
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
Avatar billede dk_akj Nybegynder
22. juli 2003 - 12:22 #3
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>


</body>
</html>


//akj
Avatar billede kelmek Nybegynder
22. juli 2003 - 12:28 #4
hmm - jeg tror du tabte mig - hvordan kan jeg bruge det her? Jeg har ikke lige gennemskuet det...
Avatar billede Slettet bruger
22. juli 2003 - 13:04 #5
Hvis du vil tjekke alle felter i en bestemt form:

<script type="text/javascript">
function tjekAlle(frm) {
  for (i = 0; i < frm.elements.length; i++) {
    if (frm.elements[i].type == "text" && isNaN(frm.elements[i].value)) {
      alert("Alle felter skal indeholde et nummer!");
      frm.elements[i].focus();
      return false;
    }
  }
  return true;
}
</script>

Form-tagget:

<form ... onSubmit="return tjekAlle(this);">
Avatar billede dk_akj Nybegynder
22. juli 2003 - 13:14 #6
Sådan phoennix :-)

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)) {

//akj
Avatar billede kelmek Nybegynder
22. juli 2003 - 13:33 #7
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.
Avatar billede dk_akj Nybegynder
22. juli 2003 - 13:43 #8
Så tror jeg du skal lave dit javascript dynamisk. Med mindre du kan sætte nogle klare regler for valideringen.

Hvis det er muligt kan du "fuske lidt" og sætte et 'alt' tag på inputten.

<input type="text" name="felt_1" alt="check"><br>

I scriptet kan du tilføje at den kun skal checke på dem med alt=check

  if (frm.elements[i].type == "text" && isNaN(frm.elements[i].value) || (frm.elements[i].value.length < 1)&& (frm.elements[i].alt == "check")) {

//akj
Avatar billede roenving Novice
23. juli 2003 - 01:34 #9
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();
}
Avatar billede kelmek Nybegynder
23. juli 2003 - 08:45 #10
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;
                             
                        }
                }               
        i += 6;
    }
   
            if (error==0) 
            myForm.submit();

}
Avatar billede kelmek Nybegynder
23. juli 2003 - 08:49 #11
Phoenixv - det var trodsalt din løsning der var tættest på det endelige resultat - du får pointene hvis du lige smider et svar. Tak til Jer andre!
Avatar billede dk_akj Nybegynder
23. juli 2003 - 08:52 #12
selvtak :-)

//akj
Avatar billede kelmek Nybegynder
23. juli 2003 - 09:02 #13
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!
Avatar billede Slettet bruger
23. juli 2003 - 12:30 #14
Svar. Men du er velkommen til også at dele ud til de andre! :)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester