J.N.Medlem sedan apr. 20031 660 inlägg HEJ!
Jag har en sida med en till flera frågor, där det finns tre alternativ. Nu önskar jag validera denna för att kontrollera att man fyllt i alla frågor.
Att validera en fråga är inget problem, men hur får man det dynamiskt att förstår att det finns tre eller fem frågor?
Samma script ska alltså kunna validera en sida med tre resp fem frågor.
if (!any_radio(form.rb)){
alert("Välj rätt svar!");
return (false);
}
function any_radio(a){
for (var i = 0; i < rb.length; i++) {
if (rb[i].checked) return true;
}
return false;
}
I vb kan man skapa varibler dynamiskt.
Jag använder Request.Form("rb"&i) (i loop), för att kontrollera antal rätt på nästa sida, fast jag får inte ihop det i js.
Jag tycker inte man ska behöva skapa tre/fem js-kod-snuttar mha vb i js-filen av översta varianten för att lösa detta?
Peter SMedlem sedan dec. 20025 483 inlägg Hej!
Jag vet inte om jag förstått dig rätt, men följande funktion validerar ett godtyckligt antal frågor i formuläret:
<script type="text/javascript">
function f(fObj) {
var
elms = fObj.elements,
iLen = elms.length,
oArr = [];
for (var i = 0; i < iLen; ++i)
if (elms[i].type == "radio")
if (i == 0 || (i > 0 && oArr[oArr.length - 1][0].name != elms[i].name))
oArr.push(elms[elms[i].name]);
iLen = oArr.length;
for (var i = 0; i < iLen; ++i) {
var
j = oArr[i].length,
ch = false;
for (var k = 0; k < j; ++k)
if (oArr[i][k].checked) {
ch = true;
break;
}
if (!ch) {
alert("Välj ett alternativ!");
return false;
}
}
return true;
}
</script>
<form onsubmit="return f(this)">
<div>
<p>Fråga 1:
<input type="radio" name="r1">
<input type="radio" name="r1">
<input type="radio" name="r1">
</p>
</div>
<div>
<p>Fråga 2:
<input type="radio" name="r2">
<input type="radio" name="r2">
<input type="radio" name="r2">
</p>
</div>
<div>
<p>Fråga 3:
<input type="radio" name="r3">
<input type="radio" name="r3">
<input type="radio" name="r3">
</p>
</div>
<div>
<p>Fråga 4:
<input type="radio" name="r4">
<input type="radio" name="r4">
<input type="radio" name="r4">
</p>
</div>
<div>
<input type="submit">
</div>
</form>
:)
J.N.Medlem sedan apr. 20031 660 inlägg HEJ!
Jo, det är så jag menar!
Lägger man till/tar bort en rb valideras att alla är ifyllda ändå.
Det jag saknar är att det står vilken fråga, men det löstes enkelt med en liten justering:
alert("Välj ett alternativ på fråga " + eval(i+1) +"!");
Red: Titta även på http://www.webforum.nu/showthread.php?s=&postid=822806#post822806 för äldre IE.
Jag testade ovanstående script igår på ett dynamiskt formulär jag har, som hela tiden skriver ut olika många radiobuttons.
På det första formuläret funkar det kanon, men när jag lade in samma sak på formulär nummer 2, får jag ett fel som säger något om "0".
Jag fattar inte vad som är fel, för koden ser likadan ut, det som skiljer är formulärsnamnet (frmStep1 resp. frmStep2) samt namnet på radioknapparna (lId resp. gId).
Är det något spec. jag ska tänka på när jag använder ovanstående?
J.N.Medlem sedan apr. 20031 660 inlägg HEJ!
Nej, det ska fungera oavsett namn.
Men, du kan ju alltid testa byta för att felsöka.
Det ser lite konstigt ut med "lId", men bokstaven l (lilla L alltså) ska väl inte stöka till något för att det "ser konstigt ut"?
Länka till sidan, och/eller klistra in felmeddelandet.
Gammal tråd, kommer inte ihåg att jag har frågat om detta...
QonosMedlem sedan sep. 2000438 inlägg lite kass på det här med javascript men detta verkar vara precis vad jag söker - förutom att mina radio-buttons heter bara 1,2, 3, 4, 5 osv. och då fungerar det inte men när jag satte ett r framför (som i exemplet) så fungera det kalasbra. hittar inget i koden jag ska ta bort för att få det att fungera. Någon som har lust att hjälpa mig med detta?
//magnus
Peter SMedlem sedan dec. 20025 483 inlägg Enligt HTML 4-specen får inte name-attributs värden inledas med siffra:
http://www.w3.org/TR/html4/types.html#type-cdata
Så om det inte är till allt för stort besvär kanske du kan döpa om dem.