webForumDet fria alternativet

Validera radiobuttons...

10 svar · 1 637 visningar · startad av oskars

oskarsMedlem sedan nov. 20051 317 inlägg
#1

Hej på er!

Jag har mängder med radiobuttons som jag enbart vill kontrollera så att inte någon är glömd.

Så här kan det se ut:

<form name="enkat1" method="post" action="#">

<input name="Question_1" type="radio" value="1" />
<input name="Question_1" type="radio" value="2" />
<input name="Question_1" type="radio" value="3" />

<input name="Question_2" type="radio" value="1" />
<input name="Question_2" type="radio" value="2" />
<input name="Question_2" type="radio" value="3" />

</form>

Kan nån hjälpa mig med ett javascript som på något sätt loopar igenom alla radiobuttons och kollar så här:

* Är någon av totalt 3st med name="Question_1" ifylld? Om inte -> alert("Du har glömt att fylla i minst en fråga");
* Är någon av totalt 3st med name="Question_2" ifylld? Om inte -> alert("Du har glömt att fylla i minst en fråga");

Förstår ni?

Letar efter en smidig lösning så min kod slipper bli så lång. Det går ju att validera alla för sig, men det borde ju gå att loopa igenom dom på något sätt?

Tacksam för hjälp!

/ O

voigtann1Medlem sedan juni 20019 519 inlägg
#2

Kör du något Javascripts ramverk?

oskarsMedlem sedan nov. 20051 317 inlägg
#3

Inget speciellt. ... :)

voigtann1Medlem sedan juni 20019 519 inlägg
#4
var validate = function(form) {
  for(var l=1;l<=2;l++) {
    var wasChecked = false;
    for (var i=0;i<form["Question_"+l].length;i++) {
      if (form["Question_"+l][i].checked) {
        wasChecked = true;
	break;
      }
    }
    if(!wasChecked) {
      alert('fyll i alla fält...');
      return false;
    }
  }

  return true;
}
oskarsMedlem sedan nov. 20051 317 inlägg
#5

Ser jättebra ut, men jag använder den nog fel tror jag:

				function validateForm() {
					var validate = function(form) {
					  for(var l=1;l<=2;l++) {
					    var wasChecked = false;
					    for (var i=0;i<form["Question_"+l].length;i++) {
					      if (form["Question_"+l][i].checked) {
					        wasChecked = true;
						break;
					      }
					    }
					    if(!wasChecked) {
					      alert('fyll i alla fält...');
					      return false;
					    }
					  }

					  return true;
					}
				}
<form name="enkat" method="post" action="do.asp" onsubmit="validateForm();">

Så tänkte jag använda den ... Men det är som att den inte går igenom funktionen och validerar utan bara går vidare till "do.asp".

Vart gör jag fel?

UPPDATERING.

Jag lyckades lösa det själv så här:

<script language="JavaScript">
<!--
function validateForm(form) {
  for(var l=1;l<=2;l++) {

	alert(l);
    var wasChecked = false;
    for (var i=0;i<form["Question_"+l].length;i++) {
      if (form["Question_"+l][i].checked) {
        wasChecked = true;
	break;
      }
    }
    if(!wasChecked) {
      alert('fyll i alla fält...');
      return false;
    }
  }
}
-->
</script>

<form name="enkat" method="post" action="do.asp" onsubmit="return validateForm(this);">

Tack för hjälpen!!

oskarsMedlem sedan nov. 20051 317 inlägg
#6

Jag försöker vidare utveckla det nu.

Jag försöker göra så att när den loopar igenom och hamnar på Question_8_a så ska den kontrollera om Question_8_a är markerad, men är den inte markerad samtidigt som Question_7_a's värde är lika med "Ja" så är det OKEJ att Question_8_a inte är markerad.

Alltså så här:

Fråga 7: Gillar du Javascript? JA / NEJ
Fråga 8: Vid Nej ovan, gillar du även HTML? JA / NEJ

Så Fråga 8 är bara obligatorisk vid ett NEJ på fråga 7.

Jag tänkte så här, men det funkar inte:

<script language="JavaScript">
<!--
function validateForm(form) {
  for(var l=1;l<=2;l++) {

    var wasChecked = false;
    for (var i=0;i<form["Question_"+l+"_a"].length;i++) {
      if (form["Question_"+l+"_a"][i].checked) {
        wasChecked = true;
	break;
      }

[B]      if (!form["Question_8_a"][i].checked) {
        if (form["Question_7_a"][i].value == "Ja") {
        wasChecked = true;
	break;
      }[/B]

    }
    if(!wasChecked) {
      alert('fyll i alla fält...');
      return false;
    }
  }
}
-->
</script>

<form name="enkat" method="post" action="do.asp" onsubmit="return validateForm(this);">
voigtann1Medlem sedan juni 20019 519 inlägg
#7

plocka bort den ifrån for loopen. Den första for-loopen säger leta igenom question_1_a och question_2_a nu.

Du få höja antal loopar den skall göra.

Men till din fråga så få du sätta en if fråga om detta är fråga 7 och de har svara X så skall fråga 8 vara markerad...

oskarsMedlem sedan nov. 20051 317 inlägg
#8

Jao, exakt så tänker jag. Det där med att ändra antal loopar har jag förstått.. Jag har bara missat att skriva in det i koden här på forumet.

Och så som du skriver, så tänker jag. Och tycker väl att jag gjort så i min kod ovan... Men jag måste lagt den fel?

voigtann1Medlem sedan juni 20019 519 inlägg
#9

variablen i är ju är så pass stor som loopen var, vilket kommer ge dig fel resultat, om du har 5 val på den sista i loopen så kommer den försöka hitta val Question_8A val 5 vilket är fel.

oskarsMedlem sedan nov. 20051 317 inlägg
#10

Äeh, där tappade du bort mig. Jag hänger inte med.

Förstår du varför inte nedan funkar? :)

<script language="JavaScript">
<!--
function validateForm(form) {
  for(var l=1;l<=10;l++) {

    var wasChecked = false;
    for (var i=0;i<form["Question_"+l+"_a"].length;i++) {
      if (form["Question_"+l+"_a"][i].checked) {
        wasChecked = true;
	break;
      }

      if (!form["Question_8_a"][i].checked) {
        if (form["Question_7_a"][i].value == "Ja") {
        wasChecked = true;
	break;
      }

    }
    if(!wasChecked) {
      alert('fyll i alla fält...');
      return false;
    }
  }
}
-->
</script>
voigtann1Medlem sedan juni 20019 519 inlägg
#11

Flytta din if fråga in till den generella loopen och kolla om l är 8 och om det är det så få du kolla igenom alla 7_a svar och se om den som är markerad är värdet "Ja".

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