Avatar billede bongo20 Nybegynder
26. februar 2003 - 12:07 Der er 11 kommentarer og
1 løsning

checkbox checker

jeg har en tabel med en masse checkboxe, og jeg har en enkelt checkbox(top) som checker alle de andre ved at køre et javascript.

Det jeg ikke har er et javascript der checker min (top) checkbox hvis alle andre er checked.

Ved nogen hvordan, eller kan spørgsmålet ikke forstås ??
Avatar billede di8leva Nybegynder
26. februar 2003 - 12:26 #1
<html>
<script language="JavaScript" type="text/JavaScript">
function checkAll(source)
{
    if(source.checked)
    {
        document.all.all[1].checked = true;
        document.all.all[2].checked = true;
        document.all.all[3].checked = true;
        document.all.all[4].checked = true;
        document.all.all[5].checked = true;
    }
    else
    {
        document.all.all[1].checked = false;
        document.all.all[2].checked = false;
        document.all.all[3].checked = false;
        document.all.all[4].checked = false;
        document.all.all[5].checked = false;
    }
}
function checkOne()
{
    if(document.all.all[1].checked &&
      document.all.all[2].checked &&
      document.all.all[3].checked &&
      document.all.all[4].checked &&
      document.all.all[5].checked)
    {
        document.all.all[0].checked = true;
    }
    else
    {
        document.all.all[0].checked = false;
    }
}
</script>
<input type="checkbox" name="all" onClick="checkAll(this)">Alle<br>
<input type="checkbox" name="all" onClick="checkOne()">En<br>
<input type="checkbox" name="all" onClick="checkOne()">To<br>
<input type="checkbox" name="all" onClick="checkOne()">Tre<br>
<input type="checkbox" name="all" onClick="checkOne()">Fire<br>
<input type="checkbox" name="all" onClick="checkOne()">Fem<br>
Avatar billede bearhugx Nybegynder
26. februar 2003 - 12:35 #2
Håber det her kan hjælpe :

<html>
  <head>
    <script type="text/javascript">
      function testForTop() {
        var top = document.getElementById("qtop");
        var result = true;
       
        var others = document.getElementById("others");
        var otherInputs = others.getElementsByTagName("input");
       
        var curInput;
        for( i=0; i<otherInputs.length; ++i ) {
          curInput = otherInputs[i];
          if( curInput.type=="checkbox" ) {
            if(!curInput.checked) {
              result = false;
            }
          }
        }
        top.checked = result;
      }
    </script>
  </head>
  <body>
    <form>
      <input type="checkbox" id="qtop" value="all"> ALLE </input>
      <div id="others" style="border:1px solid #ff0000;">
        <input type="checkbox" id="qa" value="A" onClick="testForTop();"> A </input><br/>
        <input type="checkbox" id="qb" value="B" onClick="testForTop();"> B </input>
      </div>
    </form>
  </body>
</html>
Avatar billede bearhugx Nybegynder
26. februar 2003 - 12:41 #3
di8leva >> Jeg kan godt lide din metode... Men document.all er jo IE specifikt ... Det virker ikke f.eks. på Netscape/Mozilla browsere...

Men hvis der også skal være selectAll - som i di8leva's eksempel - så er her mit bud

      function selectAll() {
        var topSelected = document.getElementById("qtop").checked;
        var others = document.getElementById("others");
        var otherInputs = others.getElementsByTagName("input");
        for( i=0; i<otherInputs.length; ++i ) {
          if( otherInputs[i].type=="checkbox" ) {
            otherInputs[i].checked = topSelected;
          }
        }
      }

hvor der så er denne tilføjelse til "ALL"-checkboksen (en onClick event)

<input type="checkbox" id="qtop" value="all" onClick="selectAll();"> ALLE </input>
Avatar billede di8leva Nybegynder
26. februar 2003 - 12:46 #4
bearhugx

document.all IE specifikt? ok...
document.getElementById("..") ? er det specifikt eller virker det i både IE og NS?

jag bruger document.all på min egen webside også, men vilken metode er korrekt?
Avatar billede bongo20 Nybegynder
26. februar 2003 - 12:49 #5
hvad sker der i denne linje : otherInputs[i].checked = topSelected;

bearhugx
Avatar billede bearhugx Nybegynder
26. februar 2003 - 12:50 #6
document.all virker kun i IE  (og åbenbart også i Opera)

getElementById virker i de fleste nyere browsere
(IE siden 5.5, Netscape siden 6.0 (bemærk ikke NS 4), Opera siden 7, Mozilla siden 0.6)
Avatar billede bearhugx Nybegynder
26. februar 2003 - 12:54 #7
Der sker det, at otherInputs[i] (som er den valgte checkboks) bliver sat lig med statusen på top-checkboksen...

Derfor, hvis all-checkboksen er false (ikke checked) , så bliver alle de underliggende checkbokses sat false -- men hvis den er true (er checked) så bliver alle underliggende checkbokses sat true ligeså :-) .. Simpel og nem forløkke til at klare et (de)/select-all problem :-))
Avatar billede bongo20 Nybegynder
26. februar 2003 - 12:58 #8
lidt ny i javascript....:o)

hvad sker der hvis den sidste af de "alm." checkboxe bliver checked ?
Avatar billede bearhugx Nybegynder
26. februar 2003 - 13:03 #9
så blvier testForTop kørt
  result er fra start sat til at være true
  men der laves et gennemløb af alle de "almindelige" chekcbokse, og hvis bare én af dem er false, så bliver result også sat false
  Derfor, i det tilfælde, hvor du har valgt alle "alm" checkboke, vil den løbe igennem forløkke uden på noget tidspunkt at sætte result til false - Dette betyder at result stadigvæk er true, når forløkken ophører - og så bliver top-checkboksen sat = result .. ergo, den bliver checked true også :-))
Avatar billede bongo20 Nybegynder
26. februar 2003 - 13:37 #10
denne sætning så : var others = document.getElementById("others");

"others" er vel kun navnet på en enkelt,.. mine har alle forskellige navne,. check1, check2 osv
Avatar billede bearhugx Nybegynder
26. februar 2003 - 13:41 #11
others er ID for den div, som heg har placeret alle de "almindelige" checkbokse i...

Faktisk så gennemgår den alle <input>s indenfor denne DIV sektion, når du enten checker ALL eller en af de almindelige checkbokse...
Derfor, hvis du skal have repetoire udvidet til mere en lige min A og B løsning, så skal de bare indsættes indenfor denne DIV...

Bemærk også at det lige så godt kunne være en <SPAN> eller f.eks. <TD>-celle -- bare sålænge den har id'en "others"
Avatar billede bongo20 Nybegynder
26. februar 2003 - 14:42 #12
så fik jeg det til at virke,..min qtop var en del af <div> så min variable i skulle starte ved 1 og ikke 0,..
derudover skal testForTop også fyres af ved load...

tak for hjælpen,..bearhugx får pointene, jeg brugte dit :o)
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