Avatar billede dotcom1 Nybegynder
09. juni 2009 - 11:34 Der er 10 kommentarer og
1 løsning

Spørgsmål til animeret vis/skjul div script

Hej.

Jeg bruger dette script til at vise/skjule en div: http://www.dynamicdrive.com/dynamicindex17/animatedcollapse.htm Det fungerer fint, men på denne side: http://www.dynamicdrive.com/dynamicindex17/animatedcollapse_suppliment.htm, kan man om en funktionalitet, hvor man ved klik på et billede (Expand) udvider div'en, og billedet ændres til "Collapse".

Mit spørgsmål er hvordan man gør, hvis man ikke bruger et billede, men et link? Hvordan kan man så skifte tekst når man har klikket for at folde ud eller lukke div'en?

Mvh.
Avatar billede andreas13_fam Nybegynder
09. juni 2009 - 11:53 #1
Hvis der står fx (Expand) for starten kunne det gøres sådan
<a href="#" onclick="this.firstChild.nodeValue=((this.firstChild.nodeValue=='Expand')?'Collapse':'Expand');">HEJ</a>
Avatar billede dotcom1 Nybegynder
09. juni 2009 - 12:09 #2
Hej.

Tak for svar, men det er en "ontoggle" event handler, jeg er ude efter, ligesom i eksemplet med knappen (billedet). Dit forslag virker sikkert også fint, men det skal helst skrives ind i ontoggle-funktionen:

animatedcollapse.ontoggle=function($, divobj, state){ //fires each time a DIV is expanded/contracted
    //$: Access to jQuery
    //divobj: DOM reference to DIV being expanded/ collapsed. Use "divobj.id" to get its ID
    //state: "block" or "none", depending on state
}

Her er koden, der bruges til en knap:

animatedcollapse.ontoggle=function($, divobj, state){
if (divobj.id=="peter" || divobj.id=="sarah") //only react to these two collapsible DIVs
document.getElementById(divobj.id+"-toggle").src=(state=="block")? "collapse.jpg" : "expand.jpg"
}

- jeg søger blot efter en idé til hvordan det gøres med et tekstlink. :)
Avatar billede andreas13_fam Nybegynder
09. juni 2009 - 13:13 #3
Prøv denne her, men selv bruger jeg ikke JQuery.
animatedcollapse.ontoggle=function($, divobj, state){
    if (divobj.id=="peter" || divobj.id=="sarah"){ //hvis det er en af knapperne
        document.getElementById(divobj+'-toggle').firstChild.nodeValue = ((state == 'block') ? 'Collapse' : 'Expand');
    }
}
Funktionen kræver dog at linket har den id som billedet normalt vil have.
fx <a href="java script:animatedcollapse.toggle('peter')"  id="peter-toggle">Expand</a>&nbsp;&nbsp;<a href="java script:animatedcollapse.show('peter')">Slide Down</a> || <a href="java script:animatedcollapse.hide('peter')">Slide Up</a>
Avatar billede dotcom1 Nybegynder
09. juni 2009 - 14:06 #4
Hej.

Tak for svar. Ja, vi nærmer os noget. :)
Det virker dog ikke helt - jeg får en fejl når jeg så klikker på "Expand": Internal server error.

Linket ser sådan ud:
<a href="java script:animatedcollapse.toggle('infobox')"  id="infobox-toggle">Expand</a>

Og koden:

animatedcollapse.ontoggle=function($, divobj, state){
    if (divobj.id=="infobox"){
        document.getElementById(divobj+'-toggle').firstChild.nodeValue = ((state == 'block') ? 'Collapse' : 'Expand');
    }
}

Jeg kan ikke lige vise dig min side, da den er intern, håber det går. Ellers må jeg lave en testside senere...
Avatar billede andreas13_fam Nybegynder
09. juni 2009 - 18:58 #5
Er du sikker på at det har noget med koden at gøre. Det er ret svært at hjælpe mere, på grund af at jeg ikke har kendskab til JQuery eller din interne side.
Men det lyder som om at du henter indholdet i div'en igennem AJAX og der er sket en intern server fejl. Men jeg gætter bare.
Avatar billede dotcom1 Nybegynder
09. juni 2009 - 21:38 #6
Jeg har lavet en testside her, hvor den oprindelige kode er - som virker: http://www.komfrisk.dk/test/test.html

Her er en side med din kode: http://www.komfrisk.dk/test/test2.html - som du kan se, så opstår der en fejl når man klikker på Expand.

Har heller ikke selv forstand på JQuery - og heller ikke ret meget javaScript, men håber at en eller anden kan gennemskue det. :)
Avatar billede dotcom1 Nybegynder
09. juni 2009 - 22:07 #7
Jeg er kommet en løsning nærmere - fandt følgende side: http://www.dynamicdrive.com/forums/showthread.php?p=197252 - jeg vil blot bruge hhv. "Vis" og "Skjul" i stedet for "+" og "-". Har lavet den foreslåede løsning her: http://www.komfrisk.dk/test/test4.html. Koden, der er brugt er:

animatedcollapse.ontoggle=function($, divobj, state){ //fires each time a DIV is expanded/contracted
    //$: Access to jQuery
    //divobj: DOM reference to DIV being expanded/ collapsed. Use "divobj.id" to get its ID
    //state: "block" or "none", depending on state
    if ($('#'+divobj.id+'-toggle').length==1){ //if toggle link has id 'divid-toggle' defined
        if (state=="block")
            $('#'+divobj.id+'-toggle').prepend('<span class="prefix">Skjul </span>')
        else
            $('#'+divobj.id+'-toggle').find('span.prefix').remove()
    }
}

Den fjerner bare "Skjul" når man klikker for at skjule - i stedet skal den skrive "Vis". Nogen idéer?
Avatar billede andreas13_fam Nybegynder
10. juni 2009 - 12:18 #8
Nu gættede jeg bare men syntes at have fundet en løsning:
animatedcollapse.ontoggle=function($, divobj, state){
    if ($('#'+divobj.id+'-toggle').length==1){
        if (state=="block"){
            $('#'+divobj.id+'-toggle').find('span.prefix').remove();
            $('#'+divobj.id+'-toggle').prepend('<span class="prefix">Skjul </span>');
        }else{
            $('#'+divobj.id+'-toggle').find('span.prefix').remove();
            $('#'+divobj.id+'-toggle').prepend('<span class="prefix">Vis </span>');
        }
    }
}
Avatar billede dotcom1 Nybegynder
10. juni 2009 - 12:51 #9
Godt gæt, det ser ud til at virke. Læg et svar. Tak for din hjælp.
Avatar billede andreas13_fam Nybegynder
10. juni 2009 - 13:55 #10
Kommer her.
Men bare så du ved det så er JQuery i min verdensforståelse noget man vælger fra og ikke til.
Avatar billede dotcom1 Nybegynder
11. juni 2009 - 09:49 #11
Fandt en mere elegant løsning her, hvis nogen skulle være interesseret:

animatedcollapse.ontoggle=function($, divobj, state) {
    if (document.getElementById(divobj.id+"-toggle"))
        document.getElementById(divobj.id+"-toggle").innerHTML=(state=="block")? "Skjul" : "Vis"
}
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