Avatar billede jobb Nybegynder
19. maj 2007 - 22:00 Der er 23 kommentarer og
1 løsning

Validering af flere forme og inputs

Hej Eksperter
Er det muligt at få et script til tjekke flere forme med tekst felter samt chk bokse og radio. det skal være sådanne at den først skal finde ud af hvad der er af felter i formen om der er tekst og chk bokse og validere det eller om der er noget andet. det må også gerne være sådanne så den kan tjekke for mail

Hilsen Kenneth
Avatar billede lolman Nybegynder
19. maj 2007 - 22:22 #1
ja det er muligt. Men hvis vi skal hjælpe dig med at lave et så kunne det være fedt med nogle informationer om hvad formene indeholder (tekstfeltes navne, type osv.)
Avatar billede jobb Nybegynder
19. maj 2007 - 22:50 #2
type="checkbox" = chk1, chk2 osv
type="text" = txt1, txt2 osv
type="radio" = r1, r2 osv

det den skal er at tjekke om felterene er tomme men i form1 er der ikke de samme felter som i form2 den skal selv finde ud af hvor mange chk, txt, r der er og validere de felter som er i formen
Avatar billede roenving Novice
20. maj 2007 - 13:52 #3
Tjah, det kan man jo så godt, men den er lidt tricky, for radios findes jo typisk i grupper med samme navn, og det vil betyde, at man skal lave noget underligt noget, for normalt vil man jo bare iterere igennem formens elementer, og så teste derfra, men gruppen skal jo testes samlet, men findes som flere elementer, der kun skal testes een gang ...

-- men f.eks. noget i denne henretning:

<script type="text/javascript">
function validerForm(f){
  var rads = [], chks = [], fjl = null, result = "";
  var e = f.elements, eType;
  for(i=0,im=e.length;im>i;i++){
    eType = e[i].type;
    if(eType == "radio"){
      if(rads[e[i].name])
        continue;
      else
        rads[e[i].name] = "radio";
    }
    if(eType == "checkbox"){
      if(chks[e[i].name])
        continue;
      else
        chks[e[i].name] = "checkbox";
    }
    if(eType.indexOf("select")>-1 && e[i].selectedIndex == 0){
      if(!fjl)
        fjl = e[i];
      result += e[i].name + " har ikke valgt en værdi\n";
    }
    if( (eType == "text" || eType == "textarea") && (e[i].value == e[i].defaultValue || e[i].value == "") ){
      if(!fjl)
        fjl = e[i];
      result += e[i].name + " er ikke udfyldt\n";
    }
    if(e[i].name.indexOf("mail")>-1 && !e[i].value.match(/^.*?@\w[\w\.-]*\.[a-z]{2,6}$/i)){
      if(!fjl)
        fjl = e[i];
      result += e[i].name + " er ikke udfyldt med en mail-adresse\n";
    }
  }
  for(n in rads){
    var r = f.elements[n], chkd = false;
    for(i=0,im=r.length;im>i;i++)
      chkd = chkd || r[i].checked;
    if(!chkd){
      if(!fjl)
        fjl = r[0];
      result += n + " er ikke udfyldt\n";
    }
  }
  for(n in chks){
    var r = f.elements[n], chkd = false;
    for(i=0,im=r.length;im>i;i++)
      chkd = chkd || r[i].checked;
    if(!chkd){
      if(!fjl)
        fjl = r[0];
      result += n + " er ikke udfyldt\n";
    }
  }
  if(fjl){
    alert("Følgende fejl i udfyldningen blev fundet:\n\n" + result);
    fjl.focus();
    return false;
  }
  return true;
}
</script>

-- og det er absolut utestet, skrevet direkte ind her, så der er sikkert en skønhedsfejl eller 3 !-)
Avatar billede jobb Nybegynder
20. maj 2007 - 14:55 #4
Tak spids hvordan kan du selv finde rundt i alt det der.
nå men jeg kigger lige på det.
Avatar billede jobb Nybegynder
20. maj 2007 - 17:03 #5
Jeg syntes ikke jeg kan få den til det. Og du har ret i at radio og checkbox skal def.. i grupper
Avatar billede jobb Nybegynder
20. maj 2007 - 17:23 #6
Jeg har fjernet nederstående da den kom med 2 fejl
for(n in chks){
    var r = f.elements[n], chkd = false;
    for(i=0,im=r.length;im>i;i++)
      chkd = chkd || r[i].checked;
    if(!chkd){
      if(!fjl)
        fjl = r[0];
      result += n + " er ikke udfyldt\n";
    }
  }

Jeg har så fundet ud af at jeg ikke kan få den til at komme med fejl på radio og checkbox som skal være i grupper. og jeg kunne godt tænke mig at man i et tlf felt kun skulle kunne sætte tal ind.
så ville jeg høre om det er muligt at bruge et paremeter i
<INPUT class=mailform_input name="kontakt_firmanavn"> for at den ikke skal i alert boksen med INPUT navnet men med noget man selv bestemmer.

Jeg kan godt lide det du har gjort med indexOf("mail") at bare navnet har noget med mail og gøre napper den som mail validering (Meget smart)
Avatar billede roenving Novice
21. maj 2007 - 01:19 #7
Efter at jeg havde sendt kalorius, kom jeg til at tænke på, at length ikke findes på elementer, der ikke er arrays, men jeg kunne lige så godt afvente andre kommentarer, og da der jo er et principielt problem med checkbokse (at det ofte er options, der er frivillige, men nogle gange er obligatoriske !-), er det svært at lave en algoritme, der holder ...

-- jeg har engang lavet en anden type validering, der var baseret på 'skygge'-inputs, hvor valideringen for det enkelte felt var angivet i disse skjulte inputs value, og umiddelbart vil jeg tro, at det er den vej, man skal rundt, hvis den form for hjælp skal med i outputtet ...

-- men ved enkelt-fejl er der jo ikke et problem, fordi der fokuseres på det felt, der har den første fejl ...
Avatar billede jobb Nybegynder
21. maj 2007 - 15:42 #8
Grunden til at jeg spørger om den mulighed er at jeg er træt af hele tiden og difinere hvad det er for et felt og i hvad for en form i scriptet. og især hvis man har mange forme. men det kunne godt være at man kan gøre det på en smartere måde.
EKS. med nogle paremeter i selve indput linien
Avatar billede roenving Novice
21. maj 2007 - 15:53 #9
Se f.eks. i denne tråd: http://www.eksperten.dk/spm/544411 ...
Avatar billede jobb Nybegynder
21. maj 2007 - 16:15 #10
Du bliver lige nød til at forklare lidt hvad du gør i de her 2 linier
Men det virker!

Store bogstaver: <input id="minInput" name="minInput" type="text" value="KUN CAPS" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;" size="20">
<input type="hidden" name="valminInput" value="caps(4,5)Store bogstaver">
<br>
Pris: <input id="minInput2" name="minInput2" autocomplete='off' type="text" value="Pris" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;" size="20">
<input type="hidden" name="valminInput2" value="curr()">
Avatar billede roenving Novice
21. maj 2007 - 16:25 #11
onfocus og onblur er bare en klassisk 'Så ryd dog feltet'-ting ...

-- det, der gøres er, at der er lavet et 'skygge'-felt, hvor der står nogle regler for værdien ...

For minInput er der et valminInput-felt, hvor der står, at der skal være 4 til 5 store bogstaver, og teksten til alerten skal være 'Store bogstaver' (hvilket er teksten foran feltet !-)

For minInput2 er der et valminInput2-felt, hvor der står, at feltet skal indeholde en valuta-værdi, som i scriptet er defineret som en talfølge evt. med tusind-separator(er) og to cifre efter en decimal-separator ...

-- på den måde får man mulighed for, helt uden problemer med værdier eller html-regler, at have en speciel validering for hvert felt, og så have et helt generelt script, der kan bruges hver gang !o]
Avatar billede jobb Nybegynder
21. maj 2007 - 16:50 #12
Se det er noget der liner det er f...... smart det er lige sådanne noget jeg er ude efter.
Er det så muligt at lave det på samme måde på chk, radio (Grupper)
Avatar billede roenving Novice
21. maj 2007 - 16:54 #13
Tjah, så skal man have gang i noget i den stil, jeg har lagt tidligere her i tråden ...
Avatar billede jobb Nybegynder
21. maj 2007 - 17:10 #14
Vil det kunne arbejde sammen i det script fra spm/544411 unden at lave nummer
Avatar billede roenving Novice
21. maj 2007 - 17:16 #15
Ja, jeg har ikke lige tid nu, men det er 'bare' at tage mekanismen, der opsamler grupperne og så tilføje den og for(n in rads) til scriptet i 544411 !o]

-- jeg vender nok til bage i morgen, så kan jeg kigge på det (ellers er der nok en anden, der kommer forbi og kaqn hjælpe dig !-)
Avatar billede jobb Nybegynder
21. maj 2007 - 17:18 #16
Det er bare i orden tak for hjælpen indtil videre jeg prøver at hoste mig lidt frem til det.
Avatar billede jobb Nybegynder
21. maj 2007 - 20:31 #17
Jeg gir op!! der er da et par sider i min bog jeg har hoppede over jeg kunne jo godt tænke mig at den brugte den samme måde som de andre.

case('chk'):
          if(e[i].name.indexOf('val')>-1&&e[i].checked){ 
            alert('Du skal afkrydse en checkbox')
            e[i].focus();
            return false;
          }
        break;
Avatar billede roenving Novice
21. maj 2007 - 22:13 #18
Næh, man må lidt længere omkring, f.eks. på den måde, jeg viste 20/05-2007 13:52:22 ...

-- kigger lige på det !-)
Avatar billede roenving Novice
22. maj 2007 - 01:06 #19
Hrm, absolut ikke testet for alvor, men ideen skulle være på plads:

<script type="text/javascript">
function valider(f){
  var e = f.elements,val,min,max,fname,tval,chks = [], rads = [];
  for(i=0;e.length>i;i++){
    if( (e[i].type=='text' || e[i].type=='textarea') && e[i].name.indexOf('val')!=0){
      fname = max = min = 0;
      val = e['val'+e[i].name].value;
      tval = val.split("(")[1].split(")");
      fname = tval[1];
      min = tval[0];
      if(min.indexOf(",")>0){
        max = +min.split(",")[1];
        min = +min.split(",")[0];
      }
      val = val.split("(")[0];
     
      if(min&&min>e[i].value.length||max&&e[i].value.length>max){
        alert('Værdien i ' + ((fname)?'"'+fname+'"':e[i].name) + ' overholder ikke kravene til længde')
        e[i].focus();
        return false;
      }
     
      var t = "\\wáàãââæåçéèêëìíîïñòóôõöøùúûüýÿ";
      var regexpmail = new RegExp("^["+t+"]["+t+"\\.\\-\\+]*@["+t+"]["+t+"\\.\\-]*\\.["+t+"]{2}["+t+"\\.\\-\\/]*$","i");

      switch(val){
        case('char'):
          if(!/^\w+$/i.test(e[i].value)){
            alert('Værdien i ' + ((fname)?'"'+fname+'"':e[i].name) + ' overholder ikke kravet om kun at bruge tegn')
            e[i].focus();
            return false;
          }
        break;
        case('caps'):
          if(!/^[A-Z]+$/.test(e[i].value)){
            alert('Værdien i ' + ((fname)?'"'+fname+'"':e[i].name) + ' overholder ikke kravet om kun at bruge store bogstaver')
            e[i].focus();
            return false;
          }
        break;
        case('number'):
          if(!/^\d+$/.test(e[i].value)){
            alert('Værdien i ' + ((fname)?'"'+fname+'"':e[i].name) + ' overholder ikke kravet om kun at bruge tal')
            e[i].focus();
            return false;
          }
        break;
        case('curr'):
          if(!/^\d+([,\.]\d{3})*([,\.]\d\d)?$/.test(e[i].value)){
            alert('Værdien i ' + ((fname)?'"'+fname+'"':e[i].name) + ' overholder ikke kravet om at bruge valuta-notation')
            e[i].focus();
            return false;
          }
        break;
        case('mail'):
          if(!regexp.test(e[i].value)){
            alert('Værdien i ' + ((fname)?'"'+fname+'"':e[i].name) + ' overholder ikke kravet om en mail-adresse')
            e[i].focus();
            return false;
          }
        break;
        default:
       
      }
    }else if(e[i].type == "checkbox" && f.elements["val" + e[i].name]){
      if(!chks[e[i].name])
        chks[e[i].name] = "checkbox";
    }
    }else if(e[i].type == "radio" && f.elements["val" + e[i].name]){
      if(!rads[e[i].name])
        rads[e[i].name] = "radio";
    }
  }
  for(n in chks){
    var chs = f.elements[n],chkd = false;
    if(chs.length){
      for(i=0,im=chs.length;im>i;i++)
        chkd = chkd || chs[i].checked;
      if(!chkd){
        alert("I " + n + " er der ikke foretaget et valg");
        chs[0].focus();
        return false;
      }
    }
  }
  for(n in rads){
    var rds = f.elements[n],chkd = false;
    if(rds.length){
      for(i=0,im=rds.length;im>i;i++)
        chkd = chkd || rds[i].checked;
      if(!chkd){
        alert("I " + n + " er der ikke foretaget et valg");
        rds[0].focus();
        return false;
      }
    }
  }
  return true;
}
</script>
Avatar billede roenving Novice
22. maj 2007 - 01:07 #20
Den skulle så kun teste checkbokse, der havde et 'skygge'-element med val foran navnet (og det samme med radios !-)
Avatar billede jobb Nybegynder
22. maj 2007 - 17:18 #21
Jeg har en Syntaks fejl og jeg kan bare ikke hitte hvor fejlen er
Avatar billede roenving Novice
22. maj 2007 - 21:44 #22
Uden ta have testet, ville jeg gætte på dette sted:

    }else if(e[i].type == "checkbox" && f.elements["val" + e[i].name]){
      if(!chks[e[i].name])
        chks[e[i].name] = "checkbox";
    }
    }else if(e[i].type == "radio" && f.elements["val" + e[i].name]){
      if(!rads[e[i].name])
        rads[e[i].name] = "radio";
    }

-- skulle være:

    }else if(e[i].type == "checkbox" && f.elements["val" + e[i].name]){
      if(!chks[e[i].name])
        chks[e[i].name] = "checkbox";
    }else if(e[i].type == "radio" && f.elements["val" + e[i].name]){
      if(!rads[e[i].name])
        rads[e[i].name] = "radio";
    }
Avatar billede roenving Novice
06. juni 2007 - 00:45 #23
Se også http://exp.dk/spm/781294 !-)

Velbekomme '-)
Avatar billede roenving Novice
08. juni 2007 - 11:55 #24
-- og tak for point ;~}
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