Toon posts:

Javascript alle divs sluiten

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig aan een pagina waarbij divs worden geopent. Als de ene div geopent wordt zou de andere open div gesloten moeten worden. Al deze divs hebben een id dat uit een database gehaalt wordt en dus geen voraf gedefinieerd id. Dit is de code dat ik heb:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var openDivs = new array();
var count = 0;

function getDiv(id) {

  document.getElementById(id).style.display = 'block';
  openDivs[count] = id; 
  count++;
    
}

function closeAllDivs() {

  for (i = 0; i < openDivs.length; i++) {
  
    document.getElementById(openDivs[i]).style.display = 'none';    
    
  }

}


dus wat ik met deze code heb geprobeerd is elk id van een op div in een array te schrijven. (array : openDivs) en dan in de closeAllDivs functie deze array te tellen en zo elke div te sluiten die open is. Maar deze code werkt dus niet. Ik roep ze aan op deze manier.

code:
1
<a href="#" onClick="JavaScript: closeAllDivs(); getDiv(\'pm_' . $showPm['id'] . '\');">test</a>


op deze manier gebeurd er totaal niets op de pagina. wanneer ik de functie closeAllDivs achter getDiv zet toont hij de div wel maar sluit hij geen andere..

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 24-04 11:26
Loop nadat de pagina is geladen met getElementByTagname (meen ik) door je pagina, en gooi alle DIVs waar je mee gaat werken in een Array.
Zorg dus dat er iets is waaraan je de div kunt herkennen, bijvoorbeeld het ID altijd beginnen met 'pw'
Dan wordt het dus iets als;
JavaScript:
1
2
3
4
5
allDivs = new Array();
for(i = 0; i < document.getElementByTagname('div').length; i++) {
  if(document.getElementByTagname('div')][i].name.substr(0, 2) == "pw")
    allDivs[allDivs.length] = document.getElementByTagname('div')[i];
}


Bij het openen van een andere div loop je gewoon door deze array heen, waarbij je kijkt of de huidige div de aangeklikte div is. Zowel, tonen, zoniet, verbergen

JavaScript:
1
2
3
4
5
6
7
8
function openDiv(obj) {
  for(i = 0; i < allDivs.length; i++) {
    if(allDivs[i].id == obj.id)
       allDivs[i].style.display = "block";
    else
       allDivs[i].style.display = "hidden";
  }
}


Heb t niet getest, maar dit zou moeten werken


-edit
Zo te zien klopt je onclick-event ook niet. Laat het "javascript: " eens weg, dat heb je alleen nodig indien je hem in een href hebt staan

[ Voor 18% gewijzigd door frickY op 15-10-2005 14:24 ]


Verwijderd

Topicstarter
Nu opent hij geen div niet meer.
Javascript
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
allDivs = new Array();

for(i = 0; i < document.getElementByTagname('div').length; i++) {

  if(document.getElementByTagname['div'][i].name.substr(0, 3) == "pm_")
  
    allDivs[allDivs.length] = document.getElementByTagname['div'][i];
    
}

function openDiv(obj) {

  for(i = 0; i < allDivs.length; i++) {
  
    if(allDivs[i].id == obj.id)
    
       allDivs[i].style.display = "block";
       
    else
    
       allDivs[i].style.display = "hidden";
       
  }
  
}


en om het op te roepen.

code:
1
<a href="#" onClick="openDiv(\'pm_' . $showPm['id'] . '\');" class="link">' . $showPm['title'] . '</a>


en zo ziet mij div er uit.
code:
1
2
3
            $content .= '<div id="pm_' . $showPm['id'] . '" class="readPm">
                           ' . fetchRead($showPm['title'], date($core->dateNotation . ' ' . $core->timeNotation, $showPm['timestamp']) . ' door ' . fetchProfileLink($showPm['fromId'], 'info'), $core->parse($showPm['content'])) . '
                         </div>';


wat loopt er nog fout?

[ Voor 31% gewijzigd door Verwijderd op 15-10-2005 14:38 ]


  • Fuzzillogic
  • Registratie: November 2001
  • Laatst online: 01-07-2025
Je verwart twee dingen met display: hidden. Je bedoelt display: none; of visibility: hidden.

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 24-04 11:26
w00ps :+ Nexxennium heeft volkomen gelijk.

Verwijderd

Topicstarter
Dat is ondertussen al veranderd maar nog steeds krijg ik geen div te zien...

edit:

light het niet aan dit stukje code

code:
1
2
3
  if(document.getElementByTagname['div'][i].name.substr(0, 3) == "pm_")
  
    allDivs[allDivs.length] = document.getElementByTagname['div'][i];


op deze manier krijgt de array toch altijd de zelfde waarde niet? Ik bedoel allDivs.lengt is toch constant? niet?

[ Voor 69% gewijzigd door Verwijderd op 15-10-2005 14:49 ]

Pagina: 1