Gå til innhold

JS: Validering - finner ikke skjema.felt.value via innparameter


Anbefalte innlegg

Hei. Har nå sittet i flere timer med en javascriptfunksjon som skal validere ett inputfelt i et skjema. Jeg får feilmelding om at "document.skjema is undefined", selv om skjema kommer inn som innparameter sammen med felt. Kode:

 

<script type="text/javascript">

function valider(skjema,felt)
{
if (document.skjema.felt.value=="")
{
	alert( "Skriv inn et gyldig antall." );
	document.skjema.felt.focus();
	return false ;
}
else
{
	regEx = /^[0-9]{1,3}$/;
    OK = regEx.test(document.skjema.felt.value);
    if(!OK)
    {
	    alert( "Antallet du har skrevet inn er ikke gyldig! Prøv igjen." );
		document.skjema.felt.focus();
		return false ;
    }		
}
}
</script>

 

det virker som om den ikke finner skjema og felt, som kommer inn der funksjonen kalles:

 

<form action='' method='post' onsubmit='return valider(this,ant".$vare->get_vareID().");'>

 

Scriptet vil altså ikke kjøres i det hele tatt. Er det noen som vet hvor feilen kan ligge?

Mvh Lars.

Lenke til kommentar
Videoannonse
Annonse

Når du sender inn 'skjema' som en parameter, blir dette lagret som en variabel ved navn 'skjema' og det er derfor 'document.skjema' er undefined, bruk kun 'skjema'.

 

Dersom dette ikke fungerer, ville jeg gitt skjemaet en ID og brukt 'document.getElementById'.

 

Ser også et potensielt problem med onsubmitten din, hvor du har brukt PHP-kode i javascript, denne bør vel skrives om til:

<form action='' method='post' 
onsubmit='return valider(this,ant"+<?php echo $vare->get_vareID(); ?>);'>

Eller noe lignende?

 

Potensiell #2: Ser ikke at skjemaet blir submitted, funksjonen bør enten ha 'return true;' eller 'skjema.submit();' på slutten?

Endret av lassejl
Lenke til kommentar

Når du sender inn 'skjema' som en parameter, blir dette lagret som en variabel ved navn 'skjema' og det er derfor 'document.skjema' er undefined, bruk kun 'skjema'.

 

Dersom dette ikke fungerer, ville jeg gitt skjemaet en ID og brukt 'document.getElementById'.

 

Ser også et potensielt problem med onsubmitten din, hvor du har brukt PHP-kode i javascript, denne bør vel skrives om til:

<form action='' method='post' 
onsubmit='return valider(this,ant"+<?php echo $vare->get_vareID(); ?>);'>

Eller noe lignende?

 

Potensiell #2: Ser ikke at skjemaet blir submitted, funksjonen bør enten ha 'return true;' eller 'skjema.submit();' på slutten?

 

Hei, og takk for svar! :)

Har prøvd bare skjema.felt... (uten document.) men da står det bare "skjema.felt is undefined", så er egentlig like langt.

 

Jeg er også nødt til å ha hele skjemaet via echo i PHP, da hele skjemaet vises via en for-løkke. Dette kommer av at det er en nettbutikk med x antall varer (et skjema for hver vare). Derfor må jeg også ha med i javascriptet hvilket skjema og hvilket felt som skal testes på (skjema.felt). Har forsøkt med getElementById, men skjønner egentlig helt hvordan den funksjonen fungerer. Skal denne hente bare skjemaet (form) eller selve feltet i skjemaet?

 

-Og det siste du skrev, mener du å ha "return true;" under if og else testene, eller i en ny (else)if-test?

 

Takk for hjelp! :)

 

EDIT:

 

Prøvde nå med getElementById:

 

function valider(skjema)
{
if (document.getElementById(skjema)==null)
{
	alert( "Skriv inn et gyldig antall." );
	document.getElementById(skjema).focus();
	return false ;
}
else
{
    regEx = /^[0-9]{1,3}$/;
    OK = regEx.test(document.getElementById(skjema));
    if(!OK)
    {
	    alert( "Antallet du har skrevet inn er ikke gyldig! Prøv igjen." );
		document.getElementById(skjema).focus();
		return false ;
	}		
}
}

 

Dette fungerer heller ikke - document.getElementById(skjema) returnerer bare null. Har jeg gjort dette riktig?

Endret av Lars-H
Lenke til kommentar

Feilen ligger i måten du henviser til DOM-elementene på.

Det skal være nok å henvise til feltene med rett navn, gitt at flere felt ikke har samme navn.

JS:

function valider(skjema,felt)
{
  if (felt.value=="")
  {
     alert( "Skriv inn et gyldig antall." );
     felt.focus();
     return false ;
  }
  else
  {
     regEx = /^[0-9]{1,3}$/;
     OK = regEx.test(felt.value);
     if(!OK)
     {
        alert( "Antallet du har skrevet inn er ikke gyldig! Prøv igjen." );
        felt.focus();
        return false ;
     }           
  }
}
</script>

HTML:

<form action='' method='post' onsubmit='return valider(this,feltet);'>
  <input name="feltet" type="text" />
  <input type="submit" />
</form>

 

EDIT:

Vil du bruke document.getElementById() blir det slik:

<script type="text/javascript">
function valider(felt)
{
  var felt = document.getElementById(felt);
  // Her kan du med fordel sjekke om feltet eksisterer
  if (felt.value=="")
  {
     alert( "Skriv inn et gyldig antall." );
     felt.focus();
     return false ;
  }
  else
  {
     regEx = /^[0-9]{1,3}$/;
     OK = regEx.test(felt.value);
     if(!OK)
     {
        alert( "Antallet du har skrevet inn er ikke gyldig! Prøv igjen." );
        felt.focus();
        return false ;
     }           
  }
}
</script>

<form action='' method='post' onsubmit='return valider("feltet");'>
   <input id="feltet" type="text" />
   <input type="submit" />
</form>

Endret av cbastus
  • Liker 1
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...