webForumDet fria alternativet

Går det att programmatiskt ange variabelnamn och kolla värdet?

JavaScriptur Javascript

12 svar · 422 visningar · startad av erciz

Medlem sedan maj 20011 826 inlägg
Frågan#1

Jag har gjort ett större formulär med radioknappar. Ungefär:

<input type="radio" name="q1" value="a"> Norrköping<br>
<input type="radio" name="q1" value="b"> Linköping<br>
<br>
<input type="radio" name="q2" value="a"> Göteborg<br>
<input type="radio" name="q2" value="b"> Malmö<br>

Jag vill sen kolla resultatet med javascript. Svaret på frågorna får jag genom att kolla variablerna q1 och q2. Går detta att göra programmatiskt? hur? t.ex. 'q'+n?

t.ex.

for(var n = 1; n < 3; n++){
    if('q'+n == 'a') points++;
}
Medlem sedan jan. 2005953 inlägg
#2

Du skulle kunna göra det med eval()

if (eval('q'+n) == 'a')

Edit:
Tittade inte tillräckligt noga, du vill ju hämta värdena från html-taggar... återkommer

Medlem sedan maj 20011 826 inlägg
#3

metalboy skrev:

Tittade inte tillräckligt noga, du vill ju hämta värdena från html-taggar... återkommer

Mm, men kommer jag inte åt forumlärvärdet från q1 genom att kolla värdet på variablen q1? ...men får inte det där att fungera. Testade

var n = 1;
if(eval('q'+n) == 'a'){
  alert('a');
} else {
  alert('b');
}
Medlem sedan aug. 20039 340 inlägg
#4

Något sådant här kanske?

<script type="text/javascript">

function iterateOptions(){
	var emptyOptGroups = [];

	for (var i=1; document.getElementsByName('q'+i).length;i++){

		var o=document.getElementsByName('q'+i), c="";

		for (var j=0; j<o.length; j++){
			if(o[j].checked)
				c=o[j].value;
		}
		
		if (!c)
			emptyOptGroups.push(i);
	}
	if(emptyOptGroups.length){
		alert('Du har glömt att fylla i dessa frågor: ' + emptyOptGroups.join(', '));
		return false;
	}else{
		return true;
	}
}

</script>
Medlem sedan maj 20011 826 inlägg
#5

nitro2k01 skrev:

...

Strålande!

Fast, hmm. Får det inte riktigt att fungera. Testade att använda getElementsByName som du tipsade om.
Kod, men svaret blir undefined:

var n = 1;
alert(document.getElementsByName('q'+n).value);
Medlem sedan juni 20031 837 inlägg
#6

Om du har fått en lösning på din fråga så acceptera gärna det svaret, Då behöver inte vi andra titta in här för att försöka hjälpa till när det redan är löst.

Medlem sedan maj 20011 826 inlägg
#7

Även detta resulterar i undefined:

var n = 1;
alert(document.getElementsByName('q'+n).checked);
Medlem sedan juni 20031 837 inlägg
#8

getElementsByName returnerar en lista med objekt, inte ett enskilt objekt.

Medlem sedan aug. 20039 340 inlägg
#9

getElementsByName returnerar en array med element. (Alltså alla element med det namnet) Därav den inre loopen.

n=1;
alert(document.getElementsByName('q'+n)[0].value);
alert(document.getElementsByName('q'+n)[1].value);

Den koden bör visa a följt av b.

Edit: o i den inre loopen refererar till resultatet av document.getElementsByName('q'+n). Du skulle alltså kunna skriva exempel-koden ovan så här med samma resultat:

n=1;
o=document.getElementsByName('q'+n);
alert(o[0].value);
alert(o[1].value);

Dessutom ska det naturligtvis vara n=1; i exemplet och inte q=1; :)

Medlem sedan maj 20011 826 inlägg
#10

The_Hulk skrev:

Om du har fått en lösning på din fråga så acceptera gärna det svaret, Då behöver inte vi andra titta in här för att försöka hjälpa till när det redan är löst.

Sorry. Hade markerat det som löst. Men sen när jag märkte att det jag trodde var lösningen inte fungerade så avmarkerade jag, precis innan jag skrev att det inte fungerade. Skulle naturligtvis gjort det i omvänd ordning :r

Medlem sedan juni 20031 837 inlägg
#11

Vill du kunna hämta upp objektet styckvis så får du lägga till id-attributet, tänk på att det måste vara unikt för varje html-tagg du använder det på.
då kan du använda getElementById(id)

Medlem sedan juni 20031 837 inlägg
#12

om du vill kolla ifall en radio-button är ikryssad kan du göra på följande

n=1;
o1 = document.getElementsByName('q'+n)[0];
o2 = document.getElementsByName('q'+n)[1];

alert(o1.checked);
alert(o2.checked);
Medlem sedan maj 20011 826 inlägg
#13

The_Hulk skrev:

om du vill kolla ifall en radio-button är ikryssad kan du göra på följande
...

Ah, tack, börjar förstå detta, ska testa lite.

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