webForumDet fria alternativet

Problem med flera if satser

3 svar · 271 visningar · startad av leniz

lenizMedlem sedan aug. 2001676 inlägg
#1

Problem med flera if satser

Hej!
Hoppas att någon har tid och lust att hjälpa mig med detta! Är helt ny på javascript men försöker få till en kod för att verifiera det som skrivits in i ett formulär innan det skickas vidare till en annan sida där det matas in i en access databas.

Mitt problem är att jag vill byta ut submitknappen i formuläret mot en bild, har därför skrivit type=image och sen onclick"klickar(); return false;"
Då startas min funktion klickar som ska kolla alla fält. Det den ska kolla är först om fältet är tomt, isf ska det komma upp ett alert meddelande. Sedan ska den kolla om det som matats in i fältet endast är siffror annars ska det komma upp ett alert meddelande om det. Det här ska den alltså göra på alla fält och när allt är korrekt inskrivet ska den skicka iväg det document.form3.submit()

Koden som jag har skrivit hittills behandlar bara tre av fälten, det första ska den endast kolla så att det inte är tomt och de övriga två fälten ska den kolla dels om det är tomt och dels om det är siffror eller inte. Problemet är att eftersom jag har if rader som säger att om ett fält är längre än 0 så ska den kolla om det är siffror. När jag då har submit grejen i else så kommer den aldrig att utföra else utan verkar fastna i de här if satserna på något vis. Visar koden här nedan. Den kollar alltså om det är siffror eller inte men tar aldrig submit…

function klickar()
{

var namn = document.form3.stugnamn.value;

if (namn.length ==0) 
{ 
	alert("Du glömde att fylla i namnet på stugan!") 
}

if (document.form3.antalstugor.value.length ==0) 
{ 
	alert("Du glömde att fylla i antal stugor av den typen!") 
}

if (document.form3.antalstugor.value.length \> 0)
{
for (var i=0; i \<document.form3.antalstugor.value.length; i++) 
{
if (document.form3.antalstugor.value.charAt(i) != " ")
{
if (document.form3.antalstugor.value.charAt(i) != "0")
{
if (!parseFloat(document.form3.antalstugor.value.charAt(i)))
{
alert("Antal stugor får bara innehålla siffror")
break
}
}
}
}
}

if (document.form3.antalbaddar.value.length ==0) 
{ 
	alert("Du glömde att fylla i antal bäddar!") 
}

if (document.form3.antalbaddar.value.length \> 0)
{
for (var i=0; i \<document.form3.antalbaddar.value.length; i++) 
{
if (document.form3.antalbaddar.value.charAt(i) != " ")
{
if (document.form3.antalbaddar.value.charAt(i) != "0")
{
if (!parseFloat(document.form3.antalbaddar.value.charAt(i)))
{
alert("Antal bäddar får bara innehålla siffror")
break
}
}
}
}
}

else 
{ 
	document.form3.submit()
}

}

JojoxxMedlem sedan juni 20004 308 inlägg
#2

Om vi hoppar över kollen om hurvida fälten är tomma, eller om de inte innehåller siffror, vilket du redan kollat (även om det hade gått att göra enklare, men huvudsaken är att du vet vad du gör). När du via en if-sats har kommit fram till att något är fel skickar du upp en alert-ruta som talar om det, men efter det använder du return false; för att returnera just falskt från funktionen. I annat fall else returnerar du true (return true) för att returnera sannt. Men, det räcker inte riktigt, sedan måste du även skicka detta från eventet (onClick) och det gör du med onClick="return klickar();, alltså du skickar tillbaks det funktionen klickar returnerar istället för som nu alltid false.

Ett annat tips är att istället för att använda onClick i på bilden använder du onSubmit i <form>-taggen istället. Det kommer att fungera på samma sätt, men även reagera om användaren trycker [enter] i ett text-fält, vilket det inte gör om du använder onClick på bild-knappen.

------------------
/ J

lenizMedlem sedan aug. 2001676 inlägg
#3

Hej!

Och tack för din hjälp och dina tips. Tyvärr får jag det inte att fungera ändå. Jag har precis som du skrev bytt ut onClick="klickar(); return false;" i formuläret till onClick="klickar(); return klickar();" Sedan har jag ändrat i koden som jag trodde att du menade.

Det som händer nu är att den fortfarande aldrig tar och skickar iväg informationen till nästa sida, trots att jag matar in all information korrekt. Sen får jag upp dubbla alert rutor för varje sak som den klagar på. När jag klickar okej på en så får jag upp en till likadan och först när jag klickat bort den så blir det tomt igen med alertrutor.

Koden ser nu ut så här:

function klickar()
{

var namn = document.form3.stugnamn.value;

if (namn.length ==0) 
{ 
	alert("Du glömde att fylla i namnet på stugan!") 
	return false; 
}

if (document.form3.antalstugor.value.length ==0) 
{ 
	alert("Du glömde att fylla i antal stugor av den typen!") 
	return false; 
}

if (document.form3.antalstugor.value.length \> 0)
{
for (var i=0; i \<document.form3.antalstugor.value.length; i++) 
{
if (document.form3.antalstugor.value.charAt(i) != " ")
{
if (document.form3.antalstugor.value.charAt(i) != "0")
{
if (!parseFloat(document.form3.antalstugor.value.charAt(i)))
{
alert("Antal stugor får bara innehålla siffror")
break
return false; 
}
}
}
}
}

if (document.form3.antalbaddar.value.length ==0) 
{ 
	alert("Du glömde att fylla i antal bäddar!")
	return false; 
}

if (document.form3.antalbaddar.value.length \> 0)
{
for (var i=0; i \<document.form3.antalbaddar.value.length; i++) 
{
if (document.form3.antalbaddar.value.charAt(i) != " ")
{
if (document.form3.antalbaddar.value.charAt(i) != "0")
{
if (!parseFloat(document.form3.antalbaddar.value.charAt(i)))
{
alert("Antal bäddar får bara innehålla siffror")
break
return false; 
}
}
}
}
}

else 
{ 
	document.form3.submit()
	return true;
}

}

JojoxxMedlem sedan juni 20004 308 inlägg
#4

Jag har precis som du skrev bytt ut onClick="klickar(); return false;" i formuläret till onClick="klickar(); return klickar();"

Nej, det har du inte. Ta en titt igen så ser du skillnaden.

Men vi struntar i det. Vi tar ett helt nytt exempel. Strunta totalt i onClick på knappen utan sätt istället onSubmit="return klickar();" i <form>-taggen. Sedan tittar vi på scriptet;

function klickar(){
   if(!document.form3.stugnamn.value){
      alert('Du har glömt att fylla i namn på stugan.');
      return false;
   } else if (!document.form3.antalstugor.value){
      alert('Du har glömt att fylla i antal stugor');
      return false;
   } else if(isNaN(document.form3.antalstugor.value) &#0124;&#0124; parseInt(document.form3.antalstugor.value)<1){
      alert('Antal stugot måste vara ett giltigt antal och inte "0".');
      return false;
   } else {
      return true;
   }
}

Nu borde du se hur du skall fortsätta.

------------------
/ J

129 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)