Avatar billede Slettet bruger
08. juni 2004 - 11:44 Der er 8 kommentarer

validering af felter der er afhænge af hinanden

Jeg har 4 varer man skal kunne bestille. For at bestille 1 vare skal man indtaste tekst i 4 felter:

Varenr
kolli
varenavn
ialt

Det betyder at jeg har 4 x 4 felter se herunder:

VARE NR 1:
Varenr
kolli
varenavn
ialt

VARENR 2:
Varenr
kolli
varenavn

VARENR 3:
Varenr
kolli
varenavn
ialt

VARENR:4
Varenr
kolli
varenavn
ialt


man skal ikke bestille alle 4 varer man må gerne nøjes med 1 vare.

KRAV TIL VALIDERING:
- Hvis man ikke har udfyldt alle felter i bestillingen af en vare skal den melde fejl.

- hvis alle felter indenfor de 4 vare er tomme skal den melde fejl
Avatar billede flushout Nybegynder
08. juni 2004 - 11:58 #1
Der er kun en ting at gøre.. gå igang med en masse if else statements og tag det systematisk fra en ende af..
Avatar billede Slettet bruger
08. juni 2004 - 12:10 #2
problemet er jeg ikke er en haj i javascript men jeg har tænkt på følgende men sådan spiller klaveret vist ikke???:

<script type="text/javascript">

function validering()
  {
  error = 0;
  if((!document.forms[0].varenr.value=='') && (!document.forms[0].kolli.value=='') && (!document.forms[0].varenavn.value=='') && ((!document.forms[0].ialt.value=='')
&&  (error==0)) 
  {       
  if((document.forms[0].varenr.value=='') && (document.forms[0].kolli.value=='') && (document.forms[0].varenavn.value=='') && ((document.forms[0].ialt.value=='')
&&  (error==0)) 
{       
    alert('Der er noget galt');
    error = 1;       
  }       
  }           
 

  if(error == 0)
  document.forms[0].submit();   
  }


</script>
Avatar billede skovenborg Nybegynder
08. juni 2004 - 13:59 #3
okay - det ser lidt advanceret ud, men det virker umiddelbart for mig:
<script type="text/javascript">
function validate(frm) {
      var valid = false;
      var antal_udfyldte = 0;
      for (i=1;i<=4;i++) {
            frmelm = frm.elements["vare"+i+"udfyldt"];
            if (frmelm.value == "true") {
                antal_udfyldte++;
                if (frm.elements["vare"+i+"nr"].value.match(/\S/) && frm.elements["vare"+i+"kolli"].value.match(/\S/) && frm.elements["vare"+i+"varenavn"].value.match(/\S/) && frm.elements["vare"+i+"ialt"].value.match(/\S/)) {
                    valid = true;
                }
                else {alert("Du skal udfylde alle felterne i vare nr. "+i); }

            }
            else if (frmelm.value == "false") {valid = false;;}
            else;
      }
      if (antal_udfyldte == 0) {valid = false;alert("Du skal udfylde mindst ét felt");}
      return valid;
}
function initForm(frm) {
      for (i=0;i<frm.length;i++) {
          if (frm.elements[i].type == "text") {
                frm.elements[i].onchange = function(e) {
                        elm = (window.event) ? event.srcElement : e.target;
                        hiddenelm = document.forms[0].elements[elm.name.substring(0,5)+"udfyldt"];
                        if (elm.value != '' && elm.value.match(/\S/)) {
                                hiddenelm.value = "true"
                        }
                        else {
                                hiddenelm.value = "false";
                        }
                }
          }
      }
}
</script>

<body onload="initForm(document.forms[0])">

Det kræver dog at du har et ekstra felt der hedder vare+nr+udfyldt, så din form ser nogenlunde sådan her ud:
VARE NR 1:
<input type="hidden" name="vare1udfyldt" />
<input type="text" name="vare1nr" />
<input type="text" name="vare1kolli" />
<input type="text" name="vare1varenavn" />
<input type="text" name="vare1ialt" />
<br />
VARENR 2:
<input type="hidden" name="vare2udfyldt" />
<input type="text" name="vare2nr" />
<input type="text" name="vare2kolli" />
Avatar billede Slettet bruger
09. juni 2004 - 08:54 #4
hvordan kører jeg funktionen?

OnSubmit="Validate()"

i form koden???
Avatar billede Slettet bruger
09. juni 2004 - 08:57 #5
KOden skal i øvrigt også validere nogle andre felter:

kan de to koder smeltes sammen??

                <script type="text/javascript">

function validering()
  {
  error = 0;
  if((document.forms[0].navn.value=='') && (error==0)) 
  {       
    alert('Tekstfeltet navn skal udfyldes!');
    document.forms[0].navn.focus();
    error = 1;       
  }           
  if((document.forms[0].adresse.value=='') && (error==0)) 
  {       
    alert('Tekstfeltet adresse skal udfyldes!');
    document.forms[0].adresse.focus();
    error = 1;       
  }           
  if((document.forms[0].postnr.value=='') && (error==0)) 
  {       
    alert('Tekstfeltet postnr skal udfyldes!');
    document.forms[0].postnr.focus();
    error = 1;       
  }           
  if((document.forms[0].city.value=='') && (error==0)) 
  {       
    alert('Tekstfeltet by skal udfyldes!');
    document.forms[0].city.focus();
    error = 1;       
  }           
  if((document.forms[0].leveringsadresse.value=='') && (error==0)) 
  {       
    alert('Tekstfeltet leveringsadresse skal udfyldes!');
    document.forms[0].leveringsadresse.focus();
    error = 1;       
  }           
  if((document.forms[0].telefon.value=='') && (error==0)) 
  {       
    alert('Tekstfeltet telefon skal udfyldes!');
    document.forms[0].telefon.focus();
    error = 1;       
  }   
  if((document.forms[0].mobil.value=='') && (error==0)) 
  {       
    alert('Tekstfeltet mobil skal udfyldes!');
    document.forms[0].mobil.focus();
    error = 1;       
  }
  if((document.forms[0].leveringsdato.value=='') && (error==0)) 
  {       
    alert('Tekstfeltet leveringsdato skal udfyldes!');
    document.forms[0].leveringsdato.focus();
    error = 1;       
  }   


  if(error == 0)
  document.forms[0].submit();   
  }


</script>
Avatar billede skovenborg Nybegynder
09. juni 2004 - 12:19 #6
nåja, det glemte jeg - du skal skrive:
<form onsubmit="return validate()"
Avatar billede skovenborg Nybegynder
09. juni 2004 - 12:20 #7
og jo de kan vel godt smeltes hurtigt sammen:
function validate(frm) {
      var valid = false;
      var antal_udfyldte = 0;
      for (i=1;i<=4;i++) {
            frmelm = frm.elements["vare"+i+"udfyldt"];
            if (frmelm.value == "true") {
                antal_udfyldte++;
                if (frm.elements["vare"+i+"nr"].value.match(/\S/) && frm.elements["vare"+i+"kolli"].value.match(/\S/) && frm.elements["vare"+i+"varenavn"].value.match(/\S/) && frm.elements["vare"+i+"ialt"].value.match(/\S/)) {
                    valid = true;
                }
                else {alert("Du skal udfylde alle felterne i vare nr. "+i); }

            }
            else if (frmelm.value == "false") {valid = false;;}
            else;
      }
      if (antal_udfyldte == 0) {valid = false;alert("Du skal udfylde mindst ét felt");}
      error = 0;
  if((document.forms[0].navn.value=='') && (error==0))
  {     
    alert('Tekstfeltet navn skal udfyldes!');
    document.forms[0].navn.focus();
    error = 1;     
  }         
  if((document.forms[0].adresse.value=='') && (error==0))
  {     
    alert('Tekstfeltet adresse skal udfyldes!');
    document.forms[0].adresse.focus();
    error = 1;     
  }         
  if((document.forms[0].postnr.value=='') && (error==0))
  {     
    alert('Tekstfeltet postnr skal udfyldes!');
    document.forms[0].postnr.focus();
    error = 1;     
  }         
  if((document.forms[0].city.value=='') && (error==0))
  {     
    alert('Tekstfeltet by skal udfyldes!');
    document.forms[0].city.focus();
    error = 1;     
  }         
  if((document.forms[0].leveringsadresse.value=='') && (error==0))
  {     
    alert('Tekstfeltet leveringsadresse skal udfyldes!');
    document.forms[0].leveringsadresse.focus();
    error = 1;     
  }         
  if((document.forms[0].telefon.value=='') && (error==0))
  {     
    alert('Tekstfeltet telefon skal udfyldes!');
    document.forms[0].telefon.focus();
    error = 1;     
  } 
  if((document.forms[0].mobil.value=='') && (error==0))
  {     
    alert('Tekstfeltet mobil skal udfyldes!');
    document.forms[0].mobil.focus();
    error = 1;     
  }
  if((document.forms[0].leveringsdato.value=='') && (error==0))
  {     
    alert('Tekstfeltet leveringsdato skal udfyldes!');
    document.forms[0].leveringsdato.focus();
    error = 1;     
  } 


  if(error == 0)
  document.forms[0].submit(); 
  }
      return valid && error;
}
Avatar billede skovenborg Nybegynder
09. juni 2004 - 12:27 #8
næ, det virker ikke lige - så du kan bare erstatte det med det her (hvilket også er en bedre løsning):
function validate(frm) {
      var valid = false;
      var antal_udfyldte = 0;
      for (i=1;i<=4;i++) {
            frmelm = frm.elements["vare"+i+"udfyldt"];
            if (frmelm.value == "true") {
                antal_udfyldte++;
                if (frm.elements["vare"+i+"nr"].value.match(/\S/) && frm.elements["vare"+i+"kolli"].value.match(/\S/) && frm.elements["vare"+i+"varenavn"].value.match(/\S/) && frm.elements["vare"+i+"ialt"].value.match(/\S/)) {
                    valid = true;
                }
                else {alert("Du skal udfylde alle felterne i vare nr. "+i); }

            }
            else if (frmelm.value == "false") {valid = false;;}
            else;
      }
      if (antal_udfyldte == 0) {valid = false;alert("Du skal udfylde mindst ét felt");} 
if((document.forms[0].navn.value=='') && valid)
  {   
    alert('Tekstfeltet navn skal udfyldes!');
    document.forms[0].navn.focus();   
  }       
  if((document.forms[0].adresse.value=='') && valid)
  {   
    alert('Tekstfeltet adresse skal udfyldes!');
    document.forms[0].adresse.focus();   
  }       
  if((document.forms[0].postnr.value=='') && valid)
  {   
    alert('Tekstfeltet postnr skal udfyldes!');
    document.forms[0].postnr.focus();   
  }       
  if((document.forms[0].city.value=='') && valid)
  {   
    alert('Tekstfeltet by skal udfyldes!');
    document.forms[0].city.focus();   
  }       
  if((document.forms[0].leveringsadresse.value=='') && valid)
  {   
    alert('Tekstfeltet leveringsadresse skal udfyldes!');
    document.forms[0].leveringsadresse.focus();   
  }       
  if((document.forms[0].telefon.value=='') && valid)
  {   
    alert('Tekstfeltet telefon skal udfyldes!');
    document.forms[0].telefon.focus();   
  }
  if((document.forms[0].mobil.value=='') && valid)
  {   
    alert('Tekstfeltet mobil skal udfyldes!');
    document.forms[0].mobil.focus();
  }
  if((document.forms[0].leveringsdato.value=='') && valid)
  {   
    alert('Tekstfeltet leveringsdato skal udfyldes!');
    document.forms[0].leveringsdato.focus();   
  } 
return valid
}
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