Avatar billede tweak Nybegynder
05. oktober 2007 - 19:04 Der er 17 kommentarer og
1 løsning

Åbne og lukke

Se her: http://www.tjkdesign.com/articles/toggle_elements.asp

Er det muligt at lave det sådan at når man trykker på Question 1? så lukker Question 2? hvis denne er åben? altså så der kun kan være et spørgsmål åben.
Avatar billede montago Praktikant
05. oktober 2007 - 23:56 #1
det er allerede implementeret

lav onClick eventene om fra
<a title="Show/hide the answer" onclick="TJK_doToggleDL(0);return false" href="#">Question 1?</a>

<a title="Show/hide the answer" onclick="TJK_ToggleDLclose();TJK_doToggleDL(0);return false" href="#">Question 1?</a>


dvs du kalder TJK_ToggleDLclose() før du åbner den du skal åbne

du _kan_ måske være nødt til at ændre TJK_ToggleDLclose() til ikke at returnere false
Avatar billede jhe-ting Nybegynder
06. oktober 2007 - 01:38 #2
Hvis der kunskal være en åben af gangen kunne du prøve at rette til:'

function TJK_doToggleDL(x){
  var zDD=document.getElementById('TJK_DL').getElementsByTagName('dd');
  var zDT=document.getElementById('TJK_DL').getElementsByTagName('dt');

for(var i=0;i<zDT.length;i++){
  if (i==x) {
    zDD[i].className='showDD';
    zDT[i].className='DTminus';
  }else{
    zDD[i].className='hideDD';
    zDT[i].className='DTplus';
  }
}
}
Avatar billede roenving Novice
06. oktober 2007 - 02:31 #3
-- men det er dumt at gå ud fra, at du viser og skjuler ved at sætte klassenavne, da det tvinger browseren til at genberegne hele den visuelle præsentation ...

-- arbejd i stedet med at sætte display eller evt. visibility, da det kun berører eet element ...

-- og så kan du med fordel opbevare et tidligere åbent element, så det kan lukkes, når et nyt skal åbnes:

var oldDD = oldDT = null;
function TJK_doToggleDL(x){
  if(oldDD){
    oldDD.style.display = "none";
    oldDT.style.backgroundImage = "img_expand.gif";
  }
  oldDD = document.getElementById('TJK_DL').getElementsByTagName('dd')[x];
  oldDT = document.getElementById('TJK_DL').getElementsByTagName('dt')[x];
  oldDD.style.display = "block";
  oldDT.style.backgroundImage = "img_contract.gif";
}

-- på den måde har du overhovedet kun fat i 4 elementer, som får ændret en enkelt (eller flere, det er der ikke noget galt for !-) style-property, hvor du i det andet script har fat i en hulens masse, og hver gang potentielt sætter browseren igang med en genberegning !-)
Avatar billede tweak Nybegynder
06. oktober 2007 - 17:52 #4
jhe-ting, Det skal også være sådan at man kan lukke et spørgsmål, altså at der ikke er nogen som står åben.

roenving, Ja ; -) Jeg forstår nul og niks, og har slet ikke tid til at sætte mig ind i javascript for tiden :-(
Avatar billede jhe-ting Nybegynder
06. oktober 2007 - 18:10 #5
OK - tweak - Hvis du kan undvære "Open all," kan det gøres let - ellers vil det være en kompliceret affære. ;)
Avatar billede tweak Nybegynder
06. oktober 2007 - 18:18 #6
Det kan jeg, for den funktion skal jeg slet ikke bruge. ;-)
Avatar billede jhe-ting Nybegynder
06. oktober 2007 - 18:22 #7
- Men roenving har ret i at det er ineffektiv kode når 'className' rettes på mange elementer ad gangen.
TJK modulet bruger desuden den "foragtede" (dvs. ineffektive og ustandardiserede) innerHTML  !!!
Find evt. en DOM kompatibel pakke.
Avatar billede jhe-ting Nybegynder
06. oktober 2007 - 18:42 #8
Hvis jeg forstår dit ønske rigtigt så vil du gerne have en liste hvor der højst kan være et åbent element.
Aldrig mere end ét.

Jeg kigger lige på det... de må kunne laves 'rigtigt' med valid kode.
Avatar billede tweak Nybegynder
06. oktober 2007 - 19:07 #9
jhe-ting, du her ret, aldrig mere end et spørgsmål åben, og så skal det være sådan at man kan lukke så der ikke er nogen åben. funktion med åben alle, den har jeg ikke brug for.
Avatar billede tweak Nybegynder
06. oktober 2007 - 19:08 #10
Og ja, valid kode vil helt sikkert være et plus, da alt andet er det.
Avatar billede jhe-ting Nybegynder
06. oktober 2007 - 20:06 #11
Well - jeg har ikke renset resten af koden, men du kan da prøve dette 'hack' som det jeg viste tidligere:

function TJK_doToggleDL(x){
  var zDD=document.getElementById('TJK_DL').getElementsByTagName('dd');
  var zDT=document.getElementById('TJK_DL').getElementsByTagName('dt');   
  for(var i=0;i<zDT.length;i++){
    if (i==x) {
      zDD[x].className=(zDD[x].className=='hideDD')?'showDD':'hideDD';
      zDT[x].className=(zDT[x].className=='DTplus')?'DTminus':'DTplus';   
    } else {
      zDD[i].className='hideDD';
      zDT[i].className='DTplus';
    }
  }
}
Avatar billede tweak Nybegynder
06. oktober 2007 - 20:10 #12
Tak for det :-)
Avatar billede tweak Nybegynder
06. oktober 2007 - 20:22 #13
Ahh, har lige et sidespørgsmål, kan man vælge at have spørgsmål 1 åbnet som standard ved sideindlæsningen?
Avatar billede jhe-ting Nybegynder
06. oktober 2007 - 20:37 #14
function TJK_ToggleDL(){
if (document.getElementById && document.getElementsByTagName){           
    var zDT=document.getElementById('TJK_DL').getElementsByTagName('dt');
    var zDD=document.getElementById('TJK_DL').getElementsByTagName('dd');
    var ToggleON = document.getElementById('TJK_ToggleON');
    var ToggleOFF = document.getElementById('TJK_ToggleOFF');   
    if (ToggleON && ToggleOFF){// Show All - Hide All "links"
        ToggleON.onclick = TJK_ToggleDLopen;
        ToggleON.title = "Show all answers";
        ToggleON.href = "#";       
        ToggleOFF.onclick = TJK_ToggleDLclose;   
        ToggleOFF.title = "Hide all answers";
        ToggleOFF.href = "#";       
    }
    for(var i=0;i<zDT.length;i++){
        var zContent = zDT[i].innerHTML;
        var zHref = "<a href='#' onclick=\"TJK_doToggleDL("+i+");return false\" title='Show/hide the answer'>";
        zDT[i].innerHTML = zHref + zContent + "</a>";
        zDD[i].className='hideDD';
        zDT[i].className='DTplus';
        }
    }
    zDD[0].className='showDD';
    zDT[0].className='DTminus';
}
Avatar billede jhe-ting Nybegynder
06. oktober 2007 - 20:38 #15
Endnu et hurtigt 'hack' ... tak for points :)
Avatar billede tweak Nybegynder
06. oktober 2007 - 20:45 #16
Tak :-)
Avatar billede olebole Juniormester
06. oktober 2007 - 20:47 #17
<ole>

Dér røg det valide til gengæld endegyldigt. Nu er det både uhensigtsmæssigt og invald kode. Brug roenvings kode i stedet  :)

/mvh
</bole>
Avatar billede tweak Nybegynder
06. oktober 2007 - 21:05 #18
ole, du ved sikkert hvad du snakker om ;-) men det er nu ikke helt ved siden af: http://www.hpregnskab.dk/regnskab.php  - noget andet er at jeg ikke kan gøre mig klog på noget som har med javascript at gøre, men jeg kan altså ikke se der er noget som ikke er hensigtsmæssigt? I er nød til at pensle det helt ud for at jeg forstår bare lidt ;-)
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