webForumDet fria alternativet

disable/enable checkboxar

18 svar · 305 visningar · startad av doggelito

doggelitoMedlem sedan juni 20003 076 inlägg
#1

behöver hjälp! :)
med en ckeckbox ska man kunna disabla/enabla andra valda checkboxar
ex:

 <input type="checkbox" name="master" onClick="disable(1,3,4);">
<input type="checkbox" name="1">
<input type="checkbox" name="2">
<input type="checkbox" name="3">
<input type="checkbox" name="4">

alltså klickar jag på master så ska checkbox 1,3 och 4 bli disabled och klickar jag igen så blir de enabled.

problem 2, det kan vara olika många boxar som ska enablas/disablas!

slänger med denna kod, kanske man kan utgå ifrån den!

function Disable_all(formobj,namestart, type_disabled){
	for(var n=0;n<formobj.length;n++){
		if(formobj[n].type=="checkbox" && formobj[n].name.indexOf(namestart)==0){
			formobj[n].disabled=type_disabled;
			}

	}
}
doggelitoMedlem sedan juni 20003 076 inlägg
#2

om det inte går att lösa föregående fråga så kanske nån vänlig själ kan bygga om denna istället. :)
klickar man en gång disablas de, klickar man igen enablas de.

onClick="Disable_all(document.form1,'area', true)"

function Disable_all(formobj,namestart, type_disabled){
	for(var n=0;n<formobj.length;n++){
		if(formobj[n].type=="checkbox" && formobj[n].name.indexOf(namestart)==0){
			formobj[n].disabled=type_disabled;
			}

	}
}
Peter SMedlem sedan dec. 20025 483 inlägg
#3
<head>
<script type="text/javascript">
<!--

function disable_enable(){
	var
		f=document.forms["f"].elements,
		i=f.length,
		a=arguments,
		j=a.length;

	while(i-->0){
		for(var k=0; k < j; k++){
			if(f[i].name==a[k]){
				f[i].disabled=(f[i].disabled)?0:1;
				break;
			}
		}
	}
};

//-->
</script>
</head>

...

<form name="f">
	<input type="checkbox" name="master" onclick="disable_enable(1,3,4);">
	<input type="checkbox" name="1">
	<input type="checkbox" name="2">
	<input type="checkbox" name="3">
	<input type="checkbox" name="4">
</form>

:)

doggelitoMedlem sedan juni 20003 076 inlägg
#4

Funkar nästan fantastiskt bra! :)
Dock, kom på ett problem:
Det kan va så att när man kommer in på sidan så är redan "master" icheckad
och checkar man då ur den så blir "child-boxarna" enablade, dvs det blir felvänt!

Går det att åtgärda?

Peter SMedlem sedan dec. 20025 483 inlägg
#5

Då gör vi så här istället :)

function disable_enable(){
	var
		f=document.forms["f"].elements,
		m=f["master"],
		i=f.length,
		a=arguments,
		j=a.length;

	while(i-->0){
		for(var k=0; k < j; k++){
			if(f[i].name==a[k]){
				f[i].disabled=(m.checked)?1:0;
				break;
			}
		}
	}
};

:)

doggelitoMedlem sedan juni 20003 076 inlägg
#6

he, nope! det finns nämligen flera masters med child-boxar. :)

Peter SMedlem sedan dec. 20025 483 inlägg
#7

Använder du samma funktion på andra "masters"?

<head>
<script type="text/javascript">
<!--

function disable_enable(){
	var
		f=document.forms["f"].elements,
		i=f.length,
		a=arguments,
		m=a[0],
		j=a.length;

	while(i-->0){
		for(var k=1; k < j; k++){
			if(f[i].name==a[k]){
				f[i].disabled=(m.checked)?1:0;
				break;
			}
		}
	};
};

//-->
</script>
</head>

<form name="f">
	<input type="checkbox" name="master" onclick="disable_enable(this,1,3,4);">
	<input type="checkbox" name="1">
	<input type="checkbox" name="2">
	<input type="checkbox" name="3">
	<input type="checkbox" name="4">

	<br>

	<input type="checkbox" name="master2" onclick="disable_enable(this,5,6,8);">
	<input type="checkbox" name="5">
	<input type="checkbox" name="6">
	<input type="checkbox" name="7">
	<input type="checkbox" name="8">
</form>

?

:)

doggelitoMedlem sedan juni 20003 076 inlägg
#8

Peter S skrev:

Använder du samma funktion på andra "masters"?

svar: ja! :)

dock är det felvänt fortfarande! är master icheckad så ska child-boxar vara enabled.

jag gissar att du fixar problemet ovan så jag frågar en till fråga på en gång! (hoppas du är på problemlösarhumör! :) )
kan med onLoad kolla om master(s) är urcheckad och i så fall disabla child-boxar redan från början?

Peter SMedlem sedan dec. 20025 483 inlägg
#9

För mig fungerar det utmärkt. Om någon förälder är förkryssad när man kommer in på sidan, blir ej dess barn förkryssade då du klickar på föräldern första gången.

Hur som helst har jag lagt till en annan funktion som kryssar ur eventuella föräldrar då sidan laddats klart.

<head>
<script type="text/javascript">
<!--

function disable_enable(){
	var
		f=document.forms["f"].elements,
		i=f.length,
		a=arguments,
		m=a[0],
		j=a.length;
	while(i-->0){
		for(var k=1; k < j; k++){
			if(f[i].name==a[k]){
				f[i].disabled=(m.checked)?true:false;
				break;
			}
		}
	};
};

window.onload=function(){
	var
		f=document.forms["f"].elements,
		i=f.length,

                [b]// Skriv in namnen på föräldrarna här[/b]
		m=["master","master2"],
		j=m.length;
	while(i-->0){
		for(var k=0; k < j; k++){
			if(f[i].name==m[k]){
				f[i].checked=false;
				break;
			}
		}
	}
};

//-->
</script>
</head>

<form name="f">
	<input type="checkbox" name="master" onclick="disable_enable(this,1,3,4);">
	<input type="checkbox" name="1">
	<input type="checkbox" name="2">
	<input type="checkbox" name="3">
	<input type="checkbox" name="4">

	<br>

	<input type="checkbox" name="master2" onclick="disable_enable(this,5,6,8);">
	<input type="checkbox" name="5">
	<input type="checkbox" name="6">
	<input type="checkbox" name="7">
	<input type="checkbox" name="8">
</form>

:)

dectgapMedlem sedan sep. 20021 655 inlägg
#10

Har jag förstått dig rätt?

<script type="text/javascript">
<!--

function disable_enable(){
	var
		f=document.forms["f"].elements,
		i=f.length,
		a=arguments,
		m=a[0],
		j=a.length;

	while(i-->0){
		for(var k=1; k < j; k++){
			if(f[i].name==a[k]){
				f[i].disabled=(!m.checked)?1:0;
				break;
			}
		}
	};
};

window.onload=function(){
	disable_enable(document.forms["f"].elements[0],1,3,4);
	disable_enable(document.forms["f"].elements[5],5,6,8);
}
//-->
</script>

EDIT:
Peter hann före (som vanligt) med en mer dynamisk lösning.

doggelitoMedlem sedan juni 20003 076 inlägg
#11

vet inte om jag gör nått fel men jag testade att kopiera din kod Peter till en helt ny sida, när sidan sedan laddas är ingen box icheckad, klickar jag sedan på master 1 så blir barnen disabled, blir det inte så för er?
detta är alltså fel, checkar man i master ska barnen bli ENABLED

kan man göra nått mer test på laddningsfunktionen, alltså ha master icheckad innan sidan laddas så man ser att barnen enablas?

(puh, känner själv att detta enabla/disabla börjar bli rörigt, hoppas ni hajjar!)

Peter SMedlem sedan dec. 20025 483 inlägg
#12

Ok, testa detta då.

<script type="text/javascript">
<!--

function disable_enable(){
	var
		f=document.forms["f"].elements,
		i=f.length,
		a=arguments,
		m=a[0],
		j=a.length;

	while(i-->0){
		for(var k=1; k < j; k++){
			if(f[i].name==a[k]){
				f[i].disabled=(m.checked)?false:true;
				break;
			}
		}
	};
};

window.onload=function(){
	var
		f=document.forms["f"].elements,
		i=f.length,
		m=["master","master2"],
		j=m.length;
	while(i-->0){
		for(var k=0; k < j; k++){
			if(f[i].name==m[k]){
				f[i].checked=true;
				break;
			}
		}
	}
};

//-->
</script>

:)

doggelitoMedlem sedan juni 20003 076 inlägg
#13

av/på funktionen funkar toppen! :bire

dock, jag vet inte om ni missförstod mig angående laddningen.
så här:
ett värde hämtas upp från databas som bestämmer om master(s) är checked eller ej vid laddning av sidan.
är en master checked ska child vara enabled vid laddning, är master EJ checked är child disabled.

Peter SMedlem sedan dec. 20025 483 inlägg
#14

Då blir det nog till att loopa ut alla namn på de barn som skall vara "enabled" då sidan laddas. Hur vet man vilka barn som tillhör vilken förälder? Det vill säga; om "master2" ej är ikryssad då sidan laddats, hur skall skriptet veta vilka barn som tillhör "master2" så att dessa kan bli "disabled"?

:)

doggelitoMedlem sedan juni 20003 076 inlägg
#15

det är inte så dynamiskt som du tror, dectgaps kod är ganska nära, behövs bara en if-tagg på nått vis.
ungefär så här:

window.onload=function(){
if master1 !== checked
disable_enable(document.forms["f"].elements[0],1,3,4);

if master2 !== checked	
disable_enable(document.forms["f"].elements[5],5,6,8);
}

fin java-script kod :) nåja, nånting ditåt!

Peter SMedlem sedan dec. 20025 483 inlägg
#16
window.onload=function(){
if(document.forms["f"].elements["master"].checked)
     disable_enable(document.forms["f"].elements[0],1,3,4);

if(document.forms["f"].elements["master2"].checked)
     disable_enable(document.forms["f"].elements[5],5,6,8);
}

:)

doggelitoMedlem sedan juni 20003 076 inlägg
#17

funkar det för dig? funkar inte för mig i alla fall.
testkod, resultatet ska bli:
master1 checkad=child enablad, master2 EJ checkad=child disablad

<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script type="text/javascript">
<!--

function disable_enable(){
	var
		f=document.forms["f"].elements,
		i=f.length,
		a=arguments,
		m=a[0],
		j=a.length;

	while(i-->0){
		for(var k=1; k < j; k++){
			if(f[i].name==a[k]){
				f[i].disabled=(m.checked)?false:true;
				break;
			}
		}
	};
};

window.onload=function(){
if(document.forms["f"].elements["master"].checked)
     disable_enable(document.forms["f"].elements[0],1,3,4);

if(document.forms["f"].elements["master2"].checked)
     disable_enable(document.forms["f"].elements[5],5,6,8);
}

//-->
</script>

</head>

<body>
<form name="f">
	<input name="master" type="checkbox" onclick="disable_enable(this,1,3,4);" checked>
	<input type="checkbox" name="1">
	<input type="checkbox" name="2">
	<input type="checkbox" name="3">
	<input type="checkbox" name="4">

	<br>

	<input type="checkbox" name="master2" onclick="disable_enable(this,5,6,8);">
	<input type="checkbox" name="5">
	<input type="checkbox" name="6">
	<input type="checkbox" name="7">
	<input type="checkbox" name="8">
</form>

</body>
</html>

med koden ovan blir ingen child disablad.
det vore super om det går att fixa! :)

dectgapMedlem sedan sep. 20021 655 inlägg
#18

Strunta i if-satserna (kör funktionerna oavsett om checkboxen är ikryssad eller inte), eftersom disable_enable() ändå kontrollerar att allting står rätt till. Alltså (ungefär samma som jag skrev där uppe):

<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script type="text/javascript">
<!--

function disable_enable(){
	var
		f=document.forms["f"].elements,
		i=f.length,
		a=arguments,
		m=a[0],
		j=a.length;

	while(i-->0){
		for(var k=1; k < j; k++){
			if(f[i].name==a[k]){
				f[i].disabled=(m.checked)?false:true;
				break;
			}
		}
	};
};

window.onload=function(){
    disable_enable(document.forms["f"].elements[0],1,3,4);
    disable_enable(document.forms["f"].elements[5],5,6,8);
}

//-->
</script>

</head>

<body>
<form name="f">
	<input name="master" type="checkbox" onclick="disable_enable(this,1,3,4);" checked>
	<input type="checkbox" name="1">
	<input type="checkbox" name="2">
	<input type="checkbox" name="3">
	<input type="checkbox" name="4">

	<br>

	<input type="checkbox" name="master2" onclick="disable_enable(this,5,6,8);">
	<input type="checkbox" name="5">
	<input type="checkbox" name="6">
	<input type="checkbox" name="7">
	<input type="checkbox" name="8">
</form>

</body>
</html>
doggelitoMedlem sedan juni 20003 076 inlägg
#19

det är ju tamme tusan världsklass. :bire
tack båda två! (nu hinner man ju faktiskt se lite hockey också!) :)

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