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
12 svar · 422 visningar · startad av erciz
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++;
}
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
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');
}
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>
...
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);
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.
getElementsByName returnerar en lista med objekt, inte ett enskilt objekt.
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; :)
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
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)
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);
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.