Avatar billede twistedup Nybegynder
28. juli 2007 - 22:29 Der er 13 kommentarer

Vis/skjul funktion - linktekst skal skifte fra "vis" til "skjul"

Hej eksperter,

Jeg en funktion, der åbner en div boks, når brugeren trykker "vis", men jeg vil gerne have, der efter boksen er åbnet står "skjul" i stedet.

Hvordan gør jeg det?

Her er min kode:

        <table width="50%" border="1" cellspacing="0" cellpadding="2">
          <?php do { ?>
          <tr>
            <td width="80%"><?php echo $row_rsEmneListe['firmanavn']; ?></td>
            <td><?php
                  if ($_GET['visible'] = "true") {
                        echo '<a href="?visible=false" onclick="return showhide(\'boks'.$row_rsEmneListe['id'].'\');">Vis</a>';
                  }
                  else {
                        echo '<a href="?visible=true" onclick="return showhide(\'boks'.$row_rsEmneListe['id'].'\');">Skjul</a>';
                  }
            ?></td></tr>
          <tr><td colspan="2">
          <div id="boks<?php echo $row_rsEmneListe['id']; ?>" style="display:<?php echo ($_GET['visible'] == "false") ? 'block' : 'none';?>;height:200px;border:1px solid;">
          <a href="detaljer.php?id=<?php echo $row_rsEmneListe['id']; ?>"><?php echo $row_rsEmneListe['tekst_kort']; ?></a>
          </div></td>
          </tr><?php } while ($row_rsEmneListe = mysql_fetch_assoc($rsEmneListe)); ?>
        </table>


og javascriptet:

  function getElm(ID) {
      if (document.getElementById) {
          return document.getElementById(ID);
      }
      else if (document.all) {
          return document.all[ID];
      }
      else { return false;}
  }
  function showhide(elmID) {
      elm = getElm(elmID);
      if (elm && elm.style) {
            if (elm.style.display == "block") {
                elm.style.display = "none";
            }
            else {
                elm.style.display = "block";
            }
      }
      return false;
  }
Avatar billede wanze Nybegynder
28. juli 2007 - 23:36 #1
Grunden til at det ikke virker nu, er jo at du først ændre situationen med "return showhide(\'boks'.$row_rsEmneListe['id'].'\');". Dvs. at den herefter bliver skjult og vist. Samtidig med at du gør det, så genindlæser du dog også siden, og ændringer bliver derfor glemt.

Løsningen kunne være at du ikke laver nogle links - ikke med href's i hvert fald. Når man klikker på dem, skal den køre showhide(), som den også gør nu. Derefter tildeler du dit link et id, så du har kontrol over det fra javascript, og ændrer indholdet når man klikker med innerHTML.

Altså:
Fjern PHP-delen med dit visible-halløjsa, og indsæt istedet:
<a id="showhide" onclick="return showhide(\'boks'.$row_rsEmneListe['id'].'\');">Vis</a>.




document.getElementById('boldStuff').innerHTML = 'Fred Flinstone';
Avatar billede wanze Nybegynder
28. juli 2007 - 23:37 #2
For pokker. nu kom jeg til at sende ved en fejl. Jeg fortsætter:

Samtidig skal du også ændre i din showhide-funktion:

function showhide(elmID) {
      elm = getElm(elmID);
      if (elm && elm.style) {
            if (elm.style.display == "block") {
                elm.style.display = "none";
                document.getElementById('showhide').innerHTML = 'Vis';
            }
            else {
                elm.style.display = "block";
                document.getElementById('showhide').innerHTML = 'Skjul';
            }
      }
      return false;
  }
Avatar billede olebole Juniormester
29. juli 2007 - 01:51 #3
<ole>

- og i valid kode fra dette årtusinde:
    document.getElementById('showhidelink').firstChild.nodeValue = 'Vis';

- henholdsvis:
    document.getElementById('showhidelink').firstChild.nodeValue = 'Skjul';

- og linket:
    echo '<a id="showhidelink" onclick="return showhide(\'boks'.$row_rsEmneListe['id'].'\');">Vis</a>';

wanze >> undgå innerHTML - og så må du ikke have en funktion med samme navn son et elements identifier  ;o)

/mvh
</bole>
Avatar billede twistedup Nybegynder
29. juli 2007 - 09:57 #4
Olebole - det meste virker som det skal. Når jeg klikker på "vis" kommer boksen fint ned og der står fint "skjul" - hvis jeg vælger at trykke vis på at emne længe nede på listen, så åbner boksen fint, men der kommer til at stå "skjul" ud for det første emne??

Har sat der sådan ind:
        <table width="50%" border="1" cellspacing="0" cellpadding="2">
          <?php do { ?>
          <tr>
            <td width="80%"><?php echo $row_rsEmneListe['firmanavn']; ?></td>
            <td><?php
                  if ($_GET['visible'] = "true") {
                        echo '<a id="showhidelink" onclick="return showhide(\'boks'.$row_rsEmneListe['id'].'\');">Vis</a>';;
                  }
                  else {
                        echo '<a id="showhidelink" onclick="return showhide(\'boks'.$row_rsEmneListe['id'].'\');">Skjul</a>';
                  }
            ?></td></tr>
          <tr><td colspan="2">
          <div id="boks<?php echo $row_rsEmneListe['id']; ?>" style="display:<?php echo ($_GET['visible'] == "false") ? 'block' : 'none';?>;height:200px;border:1px solid;">
          <a href="detaljer.php?id=<?php echo $row_rsEmneListe['id']; ?>"><?php echo $row_rsEmneListe['tekst_kort']; ?></a>
          </div></td>
          </tr><?php } while ($row_rsEmneListe = mysql_fetch_assoc($rsEmneListe)); ?>
        </table>


java script:

  function getElm(ID) {
      if (document.getElementById) {
          return document.getElementById(ID);
      }
      else if (document.all) {
          return document.all[ID];
      }
      else { return false;}
  }
  function showhide(elmID) {
      elm = getElm(elmID);
      if (elm && elm.style) {
            if (elm.style.display == "block") {
                elm.style.display = "none";
                document.getElementById('showhidelink').firstChild.nodeValue = 'Vis';
            }
            else {
                elm.style.display = "block";
                document.getElementById('showhidelink').firstChild.nodeValue = 'Skjul';
            }
      }
      return false;
  }
Avatar billede wanze Nybegynder
29. juli 2007 - 21:33 #5
Du nævnte ikke nogetom, at der var flere divs før. Det var måske værd at tage med. Du bliver nødt til at give de forskellige elementer hvert sit id, da de ikke alle kan have id 'showhidelink'. Du kan blot tildele dem et nummerid som fx 'showhidelink1' og 'showhidelink2'.
Avatar billede twistedup Nybegynder
30. juli 2007 - 00:10 #6
jeg laver jo et udtræk fra en database, så jeg kan ikke navngive alle emnerne. Jeg forstår ikke helt - fordi funktionen virkede fint, da der bare stod Vis/skjul hele tiden, og jeg henter jo et unikt id fra databasen hver gang (boks'.$row_rsEmneListe['id'].') og id'et på boksen bliver således også unikt for den enkelte boks

Tror altså ikke på at det er det der er galt - eller også forstår jeg ikke helt hvad du mener..? :)
Avatar billede olebole Juniormester
30. juli 2007 - 00:35 #7
twistedup >> Prøv lige at vise din kode, som den står i ShowSource - uden din PHP-kode  ;o)
Avatar billede twistedup Nybegynder
30. juli 2007 - 08:22 #8
olebole >> det er "showsource" er jeg godt nok ikke bekendt med :) men har tager kilde-koen fra browseren, der er da ingen php-kode :)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Emneliste</title>
<script type="text/javascript" src="show_hide.js"><!-- vis/skjul emne-funktionalitet --></script>
</head>

<body>

        <table width="50%" border="1" cellspacing="0" cellpadding="2">
                    <tr>
            <td width="80%">ILVA</td>
            <td><a id="showhidelink" onclick="return showhide('boks1');">Vis</a></td></tr>
          <tr><td colspan="2">
          <div id="boks1" style="display:none;height:200px;border:1px solid;">
          <a href="detaljer.php?id=1">Kunne du tænke dig et spændende og udfordrende job i et ungt team? Bla bla</a>
          </div></td>
          </tr>          <tr>
            <td width="80%">Forlaget KSI</td>
            <td><a id="showhidelink" onclick="return showhide('boks2');">Vis</a></td></tr>
          <tr><td colspan="2">
          <div id="boks2" style="display:none;height:200px;border:1px solid;">
          <a href="detaljer.php?id=2">TESTTESTTESTTESTTEST TESTTESTTESTTEST</a>
          </div></td>
          </tr>          <tr>
            <td width="80%">TEST</td>
            <td><a id="showhidelink" onclick="return showhide('boks3');">Vis</a></td></tr>
          <tr><td colspan="2">
          <div id="boks3" style="display:none;height:200px;border:1px solid;">
          <a href="detaljer.php?id=3">TESTTESTTESTTESTTEST</a>
          </div></td>
          </tr>          <tr>
            <td width="80%">PaMu design</td>
            <td><a id="showhidelink" onclick="return showhide('boks4');">Vis</a></td></tr>
          <tr><td colspan="2">
          <div id="boks4" style="display:none;height:200px;border:1px solid;">
          <a href="detaljer.php?id=4">BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA </a>
          </div></td>
          </tr>          <tr>
            <td width="80%">NY ilva</td>
            <td><a id="showhidelink" onclick="return showhide('boks5');">Vis</a></td></tr>
          <tr><td colspan="2">
          <div id="boks5" style="display:none;height:200px;border:1px solid;">
          <a href="detaljer.php?id=5">TESTTESTTEST</a>
          </div></td>
          </tr>          <tr>
            <td width="80%">TV2</td>
            <td><a id="showhidelink" onclick="return showhide('boks6');">Vis</a></td></tr>
          <tr><td colspan="2">
          <div id="boks6" style="display:none;height:200px;border:1px solid;">
          <a href="detaljer.php?id=6">TESTTEST</a>
          </div></td>
          </tr>        </table>

</body>               
</html>


java script:

  function getElm(ID) {
      if (document.getElementById) {
          return document.getElementById(ID);
      }
      else if (document.all) {
          return document.all[ID];
      }
      else { return false;}
  }
  function showhide(elmID) {
      elm = getElm(elmID);
      if (elm && elm.style) {
            if (elm.style.display == "block") {
                elm.style.display = "none";
                document.getElementById('showhidelink').firstChild.nodeValue = 'Vis';
            }
            else {
                elm.style.display = "block";
                document.getElementById('showhidelink').firstChild.nodeValue = 'Skjul';
            }
      }
      return false;
  }
Avatar billede twistedup Nybegynder
30. juli 2007 - 08:22 #9
Hov! .. er = der ;)
Avatar billede twistedup Nybegynder
30. juli 2007 - 22:42 #10
fandt ud af det - javascriptet skulle med i php's repeat-funktion. Og så skulle jeg hente id'et ind som du skrev wanze. Det kunne jeg så gøre med lidt php :)


Her er koden:


        <table width="50%" border="1" cellspacing="0" cellpadding="2">
          <?php do { ?>
          <script type="text/javascript"> 
          function getElm(ID) {
              if (document.getElementById) {
                  return document.getElementById(ID);
              }
              else if (document.all) {
                  return document.all[ID];
              }
              else { return false;}
          }
          function showhide<?php echo $row_rsEmneListe['id']; ?>(elmID) {
              elm = getElm(elmID);
              if (elm && elm.style) {
                    if (elm.style.display == "block") {
                        elm.style.display = "none";
                        document.getElementById('showhidelink<?php echo $row_rsEmneListe['id']; ?>').firstChild.nodeValue = 'Vis';
                    }
                    else {
                        elm.style.display = "block";
                        document.getElementById('showhidelink<?php echo $row_rsEmneListe['id']; ?>').firstChild.nodeValue = 'Skjul';
                    }
              }
              return false;
          }
          </script>
          <tr>
            <td width="80%"><?php echo $row_rsEmneListe['firmanavn']; ?></td>
            <td><?php
                  if ($_GET['visible'] = "true") {
                        echo '<a id="showhidelink'.$row_rsEmneListe['id'].'" onclick="return showhide'.$row_rsEmneListe['id'].'(\'boks'.$row_rsEmneListe['id'].'\');">Vis</a>';
                  }
                  else {
                        echo '<a id="showhidelink'.$row_rsEmneListe['id'].'" onclick="return showhide'.$row_rsEmneListe['id'].'(\'boks'.$row_rsEmneListe['id'].'\');">Skjul</a>';
                  }
            ?></td></tr>
          <tr><td colspan="2">
          <div id="boks<?php echo $row_rsEmneListe['id'];?>" style="display:<?php echo ($_GET['visible'] == "false") ? 'block' : 'none';?>;height:200px;border:1px solid;">
          <a href="detaljer.php?id=<?php echo $row_rsEmneListe['id']; ?>"><?php echo $row_rsEmneListe['tekst_kort']; ?></a>
          </div></td>
          </tr><?php } while ($row_rsEmneListe = mysql_fetch_assoc($rsEmneListe)); ?>
        </table>
Avatar billede twistedup Nybegynder
30. juli 2007 - 22:42 #11
hvis I begge smider et svar kan I dele pointene. I hjalp jo begge til løsningen :)
Avatar billede wanze Nybegynder
31. juli 2007 - 22:52 #12
Tak
Avatar billede twistedup Nybegynder
03. august 2007 - 15:10 #13
..olebole vil du ha' point? Ellers får wanze dem :)
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