Avatar billede Christian_Bundgaard Nybegynder
02. september 2010 - 18:15 Der er 11 kommentarer og
1 løsning

Show/hide funktion - lille problem

Hej,

Nok ret nemt spørgsmål, men der gives alligevel 50 point. Jeg er ved at lave en show/hide funktion, men der er stadig lidt problemer. Jeg vil gerne have, at der starter med at stå "Læs mere..." på show-funktionen, og derefter "Skjul teksten..." på samme funktion, men nu gør den det jo bare modsat. Jeg har googlet lidt, men jeg synes ikke de er vildt effektive. Til sidst prøvede jeg at lave lidt om på et af dem - problemet med de scripts jeg fandt var, at den kun bytter teksten ud med første ID.

Nok snak. Nu til kode - andre rettelser er også velkomne.

I headeren...:

----------
<script type="text/javascript">
function showHide(id) {
var ele = document.getElementById(id);
if(ele.style.display == "block") {
    ele.style.display = "none";
}
else {
    ele.style.display = "block";
}
</script>
// Jeg valgte at fjerne den funktion jeg prøvede at lave til at skifte teksten, da den ikke virkede.
----------


og brug af det...:

----------
<h2>Eksempel</h2>
Eksempel... <br />
Eksempel... <br />

<div id="n1" style="display: none;">
Uendelige linjer... <br />
Uendelige linjer... <br />
Uendelige linjer... <br />
Uendelige linjer... <br />
</div>

<br />

<a href="#" onclick="showHide('n1');">Læs mere...</a>

----------

Den virker fint, det er bare det med teksten... Hvis du stadig er i tvivl er det link-teksten, jeg snakker om.

Håber på hurtigst svar,
CB
Avatar billede Slettet bruger
02. september 2010 - 19:07 #1
Dette burde gøre det..
<script>
function showHide(theLink,id)
  {
  var ele = document.getElementById(id);
  if(ele.style.display == "block")
      {
      ele.style.display = "none"
      theLink.innerHTML = "Læs mere..."
      }
  else
      {
      ele.style.display = "block"
      theLink.innerHTML = "Klap i"
      }
  }
</script>

...

<a href="#" onclick="showHide(this,'n1');">Læs mere...</a>
Avatar billede ggxdg Nybegynder
02. september 2010 - 19:12 #2
<script type="text/javascript">
function showHide(id) {
var ele = document.getElementById(id);
if(ele.style.display == "block") {
    ele.style.display = "none";
    document.getElementById(id+"a").innerHTML = "Læs mere...";
}
else {
    ele.style.display = "block";
    document.getElementById(id+'a').innerHTML = "Skjul";
}
</script>


<a id="'n1a'" href="#" onclick="showHide('n1');">Læs mere...</a>


ved ikke lige om det funker...
Avatar billede ggxdg Nybegynder
02. september 2010 - 19:14 #3
T4NKER's løsning er ret så meget mere elegant :P
Avatar billede ggxdg Nybegynder
02. september 2010 - 19:15 #4
Ville man så i stedet for alt det med id osv kunne bruge
this.parent?
Avatar billede ggxdg Nybegynder
02. september 2010 - 19:17 #5
d'oh.. bare glem hvad jeg sagde... linket er jo for hulen ikke child af div'en :P
Avatar billede Christian_Bundgaard Nybegynder
02. september 2010 - 19:51 #6
Fantastisk, det virker. Mange tak for hjælpen - jeg vil gerne lære, så hvis du har en forklaring på det, er den velkommen. Men under alle omstændigheder får du hele 50 point ;)
Avatar billede Christian_Bundgaard Nybegynder
02. september 2010 - 19:57 #7
Lige en tilføjelse, er det muligt at gøre, så når man trykker, bliver man det samme sted på siden, som man var i forvejen? Det er lidt irriterende, at siden går helt op til toppen.
Avatar billede ggxdg Nybegynder
02. september 2010 - 20:33 #8
"this" fungerer lidt på samme måde som "document.getElementById(id)", den refererer bare til det aktive element i stedet for at referere til et fast tag.
".innerHTML" ændrer teksten i et tag.

I mit kode-stykke, giver jeg "anchor'en" (<a>) en id, for at kunne kalde den med document.getElementById(id+'a'), men i stedet for at skulle tilføje id'er bruger man bare "this"


Mit kluntede forsøg:
document.getElementById(id+'a').innerHTML = "Læs mere...";
<a id="n1a" href="#" onclick="showHide('n1');">Læs mere...</a>


T4NKER's elegante kode:
showHide(theLink,id) {
  ...
  theLink.innerHTML = "Læs mere...";
  //(this.innerHTML = "Læs mere...";)
  ...
}

<a href="#" onclick="showHide(this,'n1');">Læs mere...</a>
Avatar billede Slettet bruger
02. september 2010 - 20:55 #9
Jada. Den "hopper" kun fordi det er et "rigtigt link" (med href i) du klikker på.
href="#" betyder faktisk at browseren skal hoppe til det "bogmærke" som hedder .. ingenting?!?
- Panik! hvad skal vi gøre, hvad skal vi GØRE.. OK, vi lader som om han bad om at starte forfra.

Så i stedet for href="#" og derefter onclick="yadayada" kan du slå det sammen i ét:

<a href="java script:showHide(this,'n1')">Læs mere...</a>
NB: "java script" skal være ét ord (bliver delt i 2 af Eksperten.dk)

Hvordan det virker... hm.. bum bum.
Der er nu 2 parametre i kaldet af funktionen:
- Dels this, som er en "pointer" til det element (linket) som indeholder funktions-kaldet selv.
- Dels, som før, id'et på den div du vil fifle med.


Funktionen finder først frem til div'en vha. id'et.
- ser efter om den står åben (display==block) - hvis ja: lukker den.
hvis ikke: så åbnes den.

innerHTML er ALT som måtte eksistere indeni det element som pointeren peger på.
Altså imellem <a..> og </a>      <= Altså " og " her : )
Avatar billede Slettet bruger
02. september 2010 - 21:03 #10
"anchor" ja, det var dét det hed - ikke "bogmærke"

Vi havde begge ideen med innerHTML (svært uden)
- "elegant" er måske at stramme den  : )
Avatar billede Christian_Bundgaard Nybegynder
02. september 2010 - 22:05 #11
Lige som jeg ville have det! Og jeg der gik og troede det var så forbandet svært - jeg googler det, og en halv dag efter har jeg en perfekt løsning takket være jer :)ggxdg beklager du ikke fik en lille del af pointene - I har begge været gode, men det var jo Tanker der kom med løsningerne ;) Tak for hurtige svar :)
Avatar billede Christian_Bundgaard Nybegynder
02. september 2010 - 22:08 #12
Forresten så virker din sidste idé, Tanker, kun med onclik i stedet for href. Href ændrer ikke på "Læs mere.../Skjul resten...". Kom ved et tilfælde til at bruge onclick i starten ;)
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