webForumDet fria alternativet

Kontrollera om radioknapp är ikryssad

6 svar · 501 visningar · startad av Helmertz

HelmertzMedlem sedan maj 2005353 inlägg
#1

Hur skulle jag skriva en funktion som undersöker följande:

  1. En radioknapp med id "homeDel" är intryckt
  2. En radioknapp med namn "delAddress" inte är intryckt
    och sedan
  3. Ifall följande två stämmer: tryck dit klassen "not chosen" på ett element med id="homeDelMenu".

Scriptet ska sitta på en submit-knapp så det behövs även returneras false (antar jag) för att inte genomföra knappens funktioner på serversidan.

Det blev lite för mycket för mina JS-kunskaper :).

colioneMedlem sedan juni 20014 421 inlägg
#2

Är du säker på att du vill använda radioknappar och inte checkboxar?

Skälet till min fråga är att radioknappar grupperas på name-egenskapen. Har du bara en radio-knapp så är det bättre att ersätta den med en checkbox.

HelmertzMedlem sedan maj 2005353 inlägg
#3

Det fungerar inte med checkboxar. Strukturen ser ut så här:

      1a        1b
             /  |  \
           2a   2b  2c

Det går alltså inte att välja någon radiobutton om dess förälder inte är vald.

colioneMedlem sedan juni 20014 421 inlägg
#4

Nåt sådant?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

	<title>untitled</title>
	<style>
	.not_chosen{
		font-weight:bold;
	}
	</style>
	<script>
	function validation(that) {
		var inps=that.getElementsByTagName('input')
		var delChecked=true
		if (document.getElementById('homeDel').checked) {
			delChecked=false
			for (i=0;i<inps.length;i++) {
				inp=inps[i]
				if (!delChecked && inp.name==="delAddress") {
					if (!inp.checked) continue;
					delChecked=true;
					break;
				}
			}
		}
		if (!delChecked) {
			document.getElementById('homeDelMenu').className="not_chosen"
		}
		return delChecked;
	}
	</script>
</head>

<body>
<form name="foo" onSubmit="return validation(this)">
	<input type="radio" id="homeDel" name="homeDel" value="1">Hemleverans
	<br />
	<input type="radio" id="delAddress" name="delAddress" value="0">Leverans adress
	<input type="radio" id="delAddress2" name="delAddress" value="1">Leverans adress
	<input type="radio" id="delAddress3" name="delAddress" value="2">Leverans adress
	<input type="submit" value="skicka">
</form>	
<p id="homeDelMenu">
test	
</p>	
</body>
</html>

Eller är jag helt ute och cyklar?

HelmertzMedlem sedan maj 2005353 inlägg
#5

Nu är jag jobbig igen, hur skulle det se ut, utbrutet från html? :) Funktionen är precis den jag vill åt!

colioneMedlem sedan juni 20014 421 inlägg
#6
function validation(that) {
		var inps=that.getElementsByTagName('input')
		var delChecked=true
		if (document.getElementById('homeDel').checked) {
			delChecked=false
			for (i=0;i<inps.length;i++) {
				inp=inps[i]
				if (!delChecked && inp.name==="delAddress") {
					if (!inp.checked) continue;
					delChecked=true;
					break;
				}
			}
		}
		if (!delChecked) {
			document.getElementById('homeDelMenu').className="not_chosen"
		}
		return delChecked;
	}

du aropar det genom att ha följande i form-taggen: onsubmit="return validate(this)"

du får inte ha mellanslag i classnamnet. vilken klass det ska bli sätter du i:
document.getElementById('homeDelMenu').className="klass-namn"

Att tänka på att funktionen just nu är skriven för att endast kolla av radio-knappar som ligger i den <form> som har onsubmit i sig.

colioneMedlem sedan juni 20014 421 inlägg
#7

Fick du till det?

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