Avatar billede madsmm Nybegynder
08. maj 2001 - 12:41 Der er 10 kommentarer og
1 løsning

Skjule / vise table rows

Hejsa,

Jeg har en tabel hvor jeg skal have mulighed for at skjule eller vise rows alt efter hvad der bliver klikket på.

Dette virker :

<head>
    <title>Test</title>
<script>
<!--
    function showDetails(id) {
        eval(\'document.all.td\' + id + \'.style.display = \"block\"\');       
    }

    function hideDetails(id) {
        eval(\'document.all.td\' + id + \'.style.display = \"none\"\');       
    }
-->
</script>

</head>

<body>

<table>
    <tr>
        <td><a href=\"java script:showDetails(1);\">Vis</a> / <a href=\"java script:hideDetails(1);\">Skjul</a></td>
    </tr>
    <tr>
        <td id=\"td1\" style=\"display:none;\">Details til 1</td>
    </tr>
    <tr>
        <td><a href=\"java script:showDetails(2);\">Vis</a> / <a href=\"java script:hideDetails(2);\">Skjul</a></td>
    </tr>
    <tr>
        <td id=\"td2\" style=\"display:none;\">Details til 2</td>
    </tr>
</table>

</body>

men problemet er at jeg gerne vil have flere rows til at reagere på et klik, men hvis man laver flere <td> med samme id, så fejler det... har i nogen forslag ???
Avatar billede jumper Nybegynder
08. maj 2001 - 12:48 #1
For det første, så har du slet ikke brug for eval til dynamiske objekt referencer.

Ret

eval(\'document.all.td\' + id + \'.style.display = \"block\"\');

til

document.all[\'td\' + id].style.display = \"block\"

For det andet, når du giver flere elementer den samme ID, bliver der lavet en collection (et array) til dem, som du kan loope henover:

function showhideDetails(id,show){
  var d = show ? \"block\" : \"none\"
  var el = document.all[\"td\" + id];
  if (el.length){
    for (var i=0, il=el.length; i<il; i++)
      el[i].style.display = d;
  } else {
    el.style.display = d;
  }
}

Når du vil vise alle elementer der hedder td1, kan du så kalde funktionen med

showhideDetails(1,true)

Når du vil skjule dem, kan du så kalde funktionen med

showhideDetails(1,false)

/Thor
Avatar billede olebole Juniormester
08. maj 2001 - 12:50 #2
<ole>
Alt efter, hvad det skal bruges til, er der flere muligheder. Én kunne være:

  <a href=\"java script:showDetails(1,2);\">Vis</a>

<script>
<!--
    function showDetails(id.id2) {
        eval(\'document.all.td\' + id + \'.style.display = \"block\"\'); 
        eval(\'document.all.td\' + id2 + \'.style.display = \"block\"\');       
    }

    function hideDetails(id,id2) {
        eval(\'document.all.td\' + id + \'.style.display = \"none\"\'); 
        eval(\'document.all.td\' + id2 + \'.style.display = \"none\"\');       
    }
-->
</script>

/mvh
</bole>
Avatar billede olebole Juniormester
08. maj 2001 - 12:52 #3
Hmmm...når Thor er vågen, er der ingen muligheder for billige points...!  *LoooL*
Jeg er selvfølgelig helt enig :)
Avatar billede madsmm Nybegynder
08. maj 2001 - 12:53 #4
takker .... tester lige...

Ja Ole, jeg havde samme tanker... men da tabellen bliver dynamisk generet, så ved jeg ikke hvor mange der er .... så tak... men nej tak ;-)
Avatar billede jumper Nybegynder
08. maj 2001 - 12:55 #5
olebole, du ved jo at jeg går efter 1. pladsen igen, både i DHTML og Javascript kategorien (samt måske generelt) ;-P

/Thor
Avatar billede torbenkoch Nybegynder
08. maj 2001 - 12:56 #6
I stedet for eval funktionen kan du vel bare skrive:

document.all(\'td\' + id).style.display = \'block\';

Det hjælper sikkert ikke på dit andet problem, med at du ikke må have flere elementer med samme id (meget rimeligt vel...).

Du kan lave en løkke gennem rækkerne i en tabel - noget i stil med (min tabel har id=\'test\'):
  <script>
    var vist = true;
    function visikkevis()
    {
     
            for (i = 0; i < document.all.test.rows.length; i++)
            {
              if (vist)
                document.all.test.rows[i].style.display  = \'none\';
              else
                document.all.test.rows[i].style.display  = \'block\';
            }   
            vist = !vist;
        }
  </script>
Avatar billede madsmm Nybegynder
08. maj 2001 - 13:00 #7
Tak til alle - men jumper var hurtigst... og hans forslag virker perfekt!
Avatar billede madsmm Nybegynder
08. maj 2001 - 13:00 #8
og så lærte han mig jo også lidt nyttigt... tak for det ;-)
Avatar billede jumper Nybegynder
08. maj 2001 - 13:01 #9
Altid glad for at kunne hjælpe ;)

/Thor
Avatar billede olebole Juniormester
08. maj 2001 - 13:02 #10
Thor....du er velkommen - men kun så længe jeg vil nøjes med 2.pladsen...!  *ROTFL*
Avatar billede madsmm Nybegynder
08. maj 2001 - 13:06 #11
I har vist for meget tid at slå ihjel =)
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