Avatar billede thomasmyg Nybegynder
24. juni 2008 - 22:34 Der er 11 kommentarer og
1 løsning

JS med radiobuttons og checkboxe

På min hjemmeside skal man fortage et par valg, valgmulighederne ser sådan her ud:

O (Radiobutton)

O (Radiobutton X)
-[] (Checkbox Xa)
-[] (Checkbox Xb)

O (Radiobutton Y)
-[] (Checkbox Ya)
-[] (Checkbox Yb)

Det jeg er ude efter er hvis man klikker på Yb så skal Ya og Y også makeres, eller hvis man klikker på Xa så skal kun X makeres og så er det kun en af de 3 radiobuttons der må være On.

Det skal også lige nævnes at jeg kode i asp.net.

Ud over det så har jeg det her script som virker uden den øverste radiobutton, men jeg kan ikke finde ud af at omskrive det og scriptet bliver brugt i asp sammenhæng.

x={"asp":[0,"tek-asp","tek-mssql"],"php":[1,"tek-php","tek-mysql"]};
function rev(e,e2){
  for(i=0;i<x[e].length;i++){
    if(i==0)document.getElementsByName("tek")[x[e][i]].checked=false;
    if(i>0)document.getElementsByName(x[e][i])[0].checked=false;
  }
  document.getElementsByName("tek")[x[e2][0]].checked=true;
  document.getElementsByName(x[e2][1])[0].checked=true;
}
Avatar billede mclemens Nybegynder
25. juni 2008 - 01:47 #1
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<script type="text/javascript">

function ael(elm,evt,f){
  if(elm.addEventListener)elm.addEventListener(evt, function(){eval(f)}, false);
  else if(elm.attachEvent)elm.attachEvent("on"+evt, function(){eval(f)});
}

ael(window,"load","wload();");

teks={};

function wload(){
  elm=document.getElementsByName("tek");
  if(elm.length>0){teks["x"]=[];
    tmp={"asp-valga":[1],"asp-valgb":[1],"php-valga":[2,-6],"php-valgb":[2,5]};
    for(i=0;i<3;i++){
      teks["x"][i]=elm[i];
      ael(elm[i],"click","handle(elm,0);");

    }for(j in tmp){
      elm=document.getElementsByName(j)[0];
      teks["x"][teks["x"].length]=elm;teks[j]=tmp[j];
      ael(elm,"click","handle(elm,1);");
    }
  }
}

function handle(elm,t){
  if(t){elmname=elm.getAttribute("name");
    for(i=0;i<3;i++){
      teks["x"][i].checked=(i==teks[elmname][0]);
    }for(;i<teks["x"].length;i++){
      if(teks["x"][i].getAttribute("name").indexOf(teks["x"][teks[elmname][0]].getAttribute("value"))!=0)teks["x"][i].checked=false;
    }for(i=1;i<teks[elmname].length;i++)if(teks[elmname][i]<0&&elm.checked==false){
      teks["x"][teks[elmname][i]*-1].checked=false;
    }else if(teks[elmname][i]>-1)teks["x"][teks[elmname][i]].checked=true;
  }else{
    for(i=3;i<teks["x"].length;i++){
      if(teks["x"][i].getAttribute("name").indexOf(elm.getAttribute("value"))!=0)teks["x"][i].checked=false;
    }
  }
}
</script>

</head><body>
r: <input type="radio" name="tek" value="r"><br>
<br>
X: <input type="radio" name="tek" value="asp"><br>
- valga: <input type="checkbox" value="Valg1" name="asp-valga"><br>
- valgb: <input type="checkbox" value="Valg2" name="asp-valgb"><br>
<br>
Y: <input type="radio" name="tek" value="php"><br>
- valga: <input type="checkbox" value="Valg1" name="php-valga"><br>
- valgb: <input type="checkbox" value="Valg2" name="php-valgb"><br>
</body></html>
Avatar billede roenving Novice
25. juni 2008 - 02:06 #2
Hvad med bare at placere de enkelte grupper af elementer i hver sit omkransende element og så tage udgangspunkt derfra, radios kunne så bare være sammensat (med samme name !-), så ville de automatisk blive sat, checkboksene kunne bare få fjernet afkrydsning ...

F.eks.

<form action=" ..." >
<div>
  <input type="radio" name="tekType" onclick="checkGroup(this)">HTML
</div>
<div>
  <input type="radio" name="tekType" onclick="checkGroup(this)">ASP<br>
  &nbsp;&nbsp;<input type="checkbox" onclick="checkGroup(this)">asp<br>
  &nbsp;&nbsp;<input type="checkbox" onclick="checkGroup(this)">mssql<br>
</div>
<div>
  <input type="radio" name="tekType" onclick="checkGroup(this)">PHP<br>
  &nbsp;&nbsp;<input type="checkbox" onclick="checkGroup(this)">php<br>
  &nbsp;&nbsp;<input type="checkbox" onclick="checkGroup(this)">mysql<br>
</div>
</form>

<script type="text/javascript">
function checkGroup(elm){
  var thisChkd = elm.checked, elms = elm.form.elements;
  for(var i=0,im=elms.length;im>i;i++){
    if(elms[i].type=="checkbox" || elms[i].type=="radio")
      elms[i].checked = false;
  }
  var actElms = elm.parentNode.getElementsByTagName("input");
  for(var i=0,im=actElms.length;im>i;i++){
    actElms[i].checked = true;
    if(actElms[i] == elm)
      break;
  }
}
</script>
Avatar billede roenving Novice
25. juni 2008 - 02:08 #3
-- nå, nu tilføjede jeg alligevel rensning af radios også, da det kun var en enkelt ekstra test i linjen !o]
Avatar billede roenving Novice
25. juni 2008 - 02:10 #4
-- og der kan sagtens tillades ekstra elementer indimellem, bare de ikke er radios eller checkboxe, for så kan man bare filtrere dem fra på samme måde som ved afcheckningen !-)
Avatar billede thomasmyg Nybegynder
25. juni 2008 - 22:37 #5
mclemens er dit eks. skrevet så det passer i asp.net?
Avatar billede mclemens Nybegynder
25. juni 2008 - 22:46 #6
Jeg ved intet om asp.net
Avatar billede thomasmyg Nybegynder
25. juni 2008 - 22:52 #7
ok, men det skriver jeg i mit spørgsmål det skal være til.
Avatar billede mclemens Nybegynder
25. juni 2008 - 22:53 #8
Roenvings er nok det bedste (jeg var temmelig træt da jeg scriptede)
- Det eneste jeg lige lod mærke til ved Roenving var:

- Hvis man klikker på mysql for at
fjerne afkrydsning er det ikke muligt.

- Hvis man klikker på en option før - f.eks. asp
eller php fjernes afkrydsningen i nedenstående elementer.

- Og så 25/06-2008 02:10:40 som Roenving selv nævner,
men det bør nok kunne løses ved at sætte en rel attribut
og spørge på den istedet for at spørge på elementets type.

...

Er strukturen som v/Roenving's eksempel ?
Hvis det er tilfældet kunne du ikke undvære
det php under php og asp under asp - det ser måske en
lille smule pudsigt ud for nogle kunder. (hvad er php uden php).

o html

o asp
[] mssql

o php
[] mysql
Avatar billede mclemens Nybegynder
25. juni 2008 - 22:54 #9
Ja, det så jeg godt - umiddelbart formodede jeg blot
at asp.net kunne outputte html elementer som andre sprog.
Avatar billede thomasmyg Nybegynder
25. juni 2008 - 22:57 #10
O HTML, uden script og database

O HTML m/ MS teknologi
-[] asp/.NET
-[] msSQL

O HTML m/ Open Source teknologi
-[] php
-[] mySQL

sådan er den 100% sat op.
Avatar billede mclemens Nybegynder
25. juni 2008 - 23:04 #11
Eksempel på forslag fra 25/06-2008 22:53:23:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<script type="text/javascript">
function checkGroup(t,t2){
  elm=document.getElementsByName("tekType");
  for(i=0;i<elm.length;i++)elm[i].checked=(i==t);
  elm=document.getElementsByName("database");
  for(i=0;i<elm.length;i++)if(i!=t2)elm[i].checked=false;
}
</script>


</head><body>


<form action=" ..." >
<div>
  <input type="radio" name="tekType" onclick="checkGroup(0,-1)">HTML
</div>
<div>
  <input type="radio" name="tekType" onclick="checkGroup(1,0)">ASP<br>
  &nbsp;&nbsp;<input type="checkbox" name="database" value="mssql" onclick="checkGroup(1,0)">mssql<br>
</div>
<div>
  <input type="radio" name="tekType" onclick="checkGroup(2,1)">PHP<br>
  &nbsp;&nbsp;<input type="checkbox" name="database" value="mysql" onclick="checkGroup(2,1)">mysql<br>
</div>
</form>

</body></html>
Avatar billede mclemens Nybegynder
25. juni 2008 - 23:11 #12
- Der skulle nok lige value ind på de tre
radio's så man kunne måle valget serverside...

Det jeg nærmere mente var:
Hvad er HTML m/ MS teknologi uden asp/.NET ?
Hvad er HTML m/ Open Source teknologi uden php ?
- Men nok om det, jeg studsede blot lidt over det ...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester