Avatar billede ballum-it Praktikant
21. december 2010 - 22:11 Der er 7 kommentarer og
1 løsning

Folde-ud-tekst ved klik

Jeg har fundet det helt rigtige script for mig. Der står et par linier tekst, og ved klik foldes boksen helt ud, så resten af teksten kommer frem. Den virker perfekt, hvis jeg kun laver en. Men laver jeg flere under hinanden, går den gal. Overskriften vil ikke vises, og boksen er foldet ud hele tiden.

Jeg ved der er noget med id, som jo skal være unik. Men laver jeg flere, vil det stadig ikke virke.

Hvad gør jeg galt??

I header har jeg dette:


<style type="text/css">
#link {
width:200px;
padding:5px 0;
text-align:left;
cursor:pointer
}
.hide {
display:none;
}

#tekst {
width:250px;
padding:5px;
font-family:verdana,arial,helvetica,sans-serif;
font-size:12px;
text-align:justify;
overflow:hidden;
margin:auto;
background-color:#ccc;
border-color:#00C;
border-width:medium;
}
#tekst p {
margin:0;
}
</style>

<script type="text/javascript">
if(window.addEventListener) {
window.addEventListener('load',init,false);
}
else {
if(window.attachEvent) {
window.attachEvent('onload',init);
}
}

function init() {

test=true;

obj=document.getElementById('link');
obj1=document.getElementById('tekst');

h=obj1.offsetHeight-12; /* 12 represents twice the padding and border width */

n=53;
c=n;

obj.className='';
obj1.style.height=c+'px';

obj.onclick=function() {
if(test==true){
num=4;
expandDiv();
test=false;
obj.firstChild.nodeValue='Close the box';

}
else {
num=-4;
expandDiv();
test=true;
obj.firstChild.nodeValue='Open the box';
}
}
}

function expandDiv() {

if(c>h){
c=h;
clearTimeout(exp);
test=false;
return;
}

if(c<n){
c=n;
clearTimeout(exp);
test=true;
return;}

c+=num;

obj1.style.height=c+'px';
exp=setTimeout('expandDiv()',10);
}

</script>


Og i bodyen har jeg dette:

<tr>
            <td width="204" height="261" valign="top"><br />
            <a href="http://link.dk" target="_blank"><img height="141" border="0" width="200" src="/img/link.png" alt="/img/link.png" /></a><br />
            </td>
            <td  align="left" valign="top" style="text-align: left;"><div id="link" class="hide"><strong>Overskriften<br /></strong>Klik her</div>
<div id="tekst">
  <p>Her stå teksten, hvor de første linjer kan se, men resten skal foldes ud ved klik.<br /><br />
                <a target="_blank" href="www.link.dk</a>" target="_blank">http://www.link.dk">www.link.dk</a>
  </p>
  <p>&nbsp;</p>
  <hr />
</div>
            </td>
        </tr>
Avatar billede majbom Novice
21. december 2010 - 22:36 #1
du er inde på noget af det rigtige, disse linjer

obj=document.getElementById('link');
obj1=document.getElementById('tekst');

henter de to elementer med hhv id link og id tekst. og som du skriver skal id'et være unikt og derfor kager det når du laver flere.

som scriptet er lavet er det ikke bare lige at konvertere det til at virke med flere - det ville være nemmere at skrive det fra bunden...
Avatar billede heinzdmx Nybegynder
21. december 2010 - 23:26 #2
Hvis du som splazz siger skal starte forfra med en anden kode, så vil jeg anbefale dig at kigge på jQuery. I jQuery kan du gøre det med de her linjer:

[div]// skjul et element med id="id"
$('#id').hide('slow');
// skjul et element med class="class"
$('.class').hide('slow');

Derudover findes toogle metoden så du på en nem måde kan skifte imellem dem.

Se:
http://www.learningjquery.com/2006/09/slicker-show-and-hide

jQuery fylder omkring 50 kb, hvis du alligevel synes det er i overkanten til kun at opnå denne ene effekt så tag et kig på den her side:

http://www.richnetapps.com/javascript-animated-collapsible-panels-without-frameworks/

Med en virkende demo her:

http://www.richnetapps.com/media/demos/panels/panels.html
Avatar billede ballum-it Praktikant
21. december 2010 - 23:50 #3
Jeg synes bare den sidste ville være rigtig fin. Jeg skal have et billede ved siden af, som der også er i mine koder øverst. Men den må også kunne lade sig gøre med den sidste mulighed der henvises til.

Det jeg nu har svært ved er, hvor de forskellige koder skal sættes ind henne. Hvad skal i header og hvad i body.

Kan I også fortælle mig det?

Undskyld jeg skal hjælpes så meget på vej, men jeg vil gerne lære det, er bare ikke særlig god til det endnu. Jeg skal bare have noget at kigge efter, så kommer det.
Avatar billede ballum-it Praktikant
21. december 2010 - 23:56 #4
Pyha det var da lidt flovt. Hele koden kunne downloades, så der var jo intet problem der.

Jeg prøver det af, og vender tilbage.
Avatar billede ballum-it Praktikant
22. december 2010 - 16:37 #5
Så virker den perfekt i jQuery. Smider du et svar til point?
Avatar billede heinzdmx Nybegynder
22. december 2010 - 21:54 #6
Svar her :)
Avatar billede ballum-it Praktikant
23. december 2010 - 06:47 #7
Tak for det, og tak for hjælpen. God jul til dig.
Avatar billede heinzdmx Nybegynder
23. december 2010 - 12:48 #8
God jul til dig også ;)
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