Avatar billede artico Novice
03. november 2011 - 15:23 Der er 12 kommentarer og
1 løsning

åbne div og lukke alle andre

Hej Jeg har  dette:

function Opendiv(id) {
for (i=1;i<=2;i++) {
var divname = 'div'+i;
var divStyle = document.getElementById(divname).style;
divStyle.display=(id==divname)?'block':'none';
}
}

men det kan kun håndtere div1 og div2, hvordan får jeg det til at fungere med flere divér f.eks div128, div300.. osv..
Avatar billede claes57 Ekspert
03. november 2011 - 15:30 #1
linjen
for (i=1;i<=2;i++) {
den starter med nummer 1 og tæller op (++ = en ad gangen) til den når 2
skal den køre til nr 9 inkl er det
for (i=1;i<=9;i++) {
skal den køre fra 3 til nr 9 inkl er det
for (i=3;i<=9;i++) {

pga denne optællingsmåde skal div'erne være fortløbende nummereret
Avatar billede artico Novice
03. november 2011 - 15:35 #2
Ok, jeg forstår, meeeen mine divXXX er ikke fortløbende de kommer fra DB og forskellige ikke fortløbne tal :-( Hvad kan jeg så gøre hvis jeg kun ønsker et enkelt div der er åbent ad gangen?
Avatar billede olsensweb.dk Ekspert
03. november 2011 - 15:51 #3
kunne du ikke overføre et array af id'er ??

så array indeholder de id'er der skal behandles
feks ar = array(2,5,7,8,9,48);
Opendiv(ar);
kræver du omskriver Opendiv()
Avatar billede claes57 Ekspert
03. november 2011 - 15:55 #4
når du henter fra databasen så skal du lade php opbygge et array i javascript - det skal bare indeholde de aktuelle numre.
linjen
for (i=1;i<=2;i++) {
skal så løbe array igennem, og linjen
var divname = 'div'+i;
der rettes i, så det tager array(i)
Avatar billede olsensweb.dk Ekspert
03. november 2011 - 16:04 #5
functionen kunne se sådan ud

<script type="text/javascript">
    function Opendiv(idarr) {
        var lng = idarr.length;       
        for (i=0;i<lng;i++) {
            var divname = 'div'+idarr[i];           
            var divStyle = document.getElementById(divname).style;
            divStyle.display=(id==divname)?'block':'none';
        }       
    }
</script>


og kaldet
<script type="text/javascript">
    var ar = Array(3,5,6,8); // kunne evt være opbygget serverside
    Opendiv(ar);
</script>
Avatar billede artico Novice
03. november 2011 - 16:22 #6
OKi, "ronols" er det sådan du mener:

<script type="text/javascript">
    var ar = $omraade['system_demo_id']; // kunne evt være opbygget serverside
    Opendiv(ar);
</script>

Og selve åbningen af divet ?, er det stadig:

<a class=\"gray\" onclick=\"Opendiv('div".$omraade['system_demo_id']."');\"

eller ?
Avatar billede claes57 Ekspert
03. november 2011 - 17:15 #7
der skal 2 parametre med til kaldet - arraynavn og det felt, der skal ses
Avatar billede olsensweb.dk Ekspert
03. november 2011 - 17:26 #8
omsætning fra php array til js array
<?php
    $omraade['system_demo_id'] = array(3,5,6,8);
    $script = '
    <script type="text/javascript">
        var ar = new Array(' . implode(',', $omraade['system_demo_id']) . ');
    </script>';
    echo $script;
?>


<?php    
    echo '<a class="gray" onclick="Opendiv('.implode(',', $omraade['system_demo_id']).')">';
    echo "klik her";
    echo "</a>";
?>


#7
det er en mulighed, måske den nemmeste/logiske,
en anden er et fast index i arrayet skal åbnes feks index 0 eller index max, det vil så bevirke man skulle lave om på rækkefælgen i arrayet for hver enkelt link :(

vi skal også lave om på disse linjer i for løkken

var divStyle = document.getElementById(divname).style;
divStyle.display=(id==divname)?'block':'none';



har du en link til en test side så vi kan se hvor langt du er kommet
Avatar billede claes57 Ekspert
03. november 2011 - 17:43 #9
#8 - din slutbemærkning med et par linjers rettelser er med jf min #4
skal så løbe array igennem, og linjen
var divname = 'div'+i;
der rettes i, så det tager array(i)
det vil gøre rettelser i efterfølgende linjer overflødig.
Avatar billede olsensweb.dk Ekspert
03. november 2011 - 18:36 #10
her er et lille dump eks

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <title></title>
    <style type="text/css">
    </style>
    <script type="text/javascript">
    function Opendiv(selid, idarr) {
        var lng = idarr.length;       
        for (i=0;i<lng;i++) {
            var divname = 'div'+idarr[i];           
            var divStyle = document.getElementById(divname).style;
            divStyle.display  = (selid==divname)?  'block' : 'none';
        }       
    }
    </script>

<?php
    $omraade['system_demo_id'] = array(3,5,6,8);
    $script = '
    <script type="text/javascript">
        var ar = new Array(' . implode(',', $omraade['system_demo_id']) . ');
    </script>';
    echo $script;
?>
</head>
<body>
<a href="#" onclick="Opendiv('div3',ar)"> her3 </a>
<div id="div3">
her er 3 sldfjwer
</div>
<a href="#" onclick="Opendiv('div5',ar)"> her5 </a>
<div id="div5">
her er 5 sldfjgdfg
</div>
<a href="#" onclick="Opendiv('div6',ar)"> her6 </a>
<div id="div6">
her er 6 sldfjwqeq
</div>
<div id="div7">
dette lukkes ikke
</div>
<a href="#" onclick="Opendiv('div8',ar)"> her8 </a>
<div id="div8">
her er 8 sldfjjljl
</div>
<?php   
    echo '<a href="#" onclick="Opendiv(\'div5\',ar)">';
    echo "klik her";
    echo "</a>";
?>
</body>
</html>
Avatar billede artico Novice
03. november 2011 - 19:40 #11
ooPS ronols.. DET SER RIGTIG GODT UD, min opgave gik ud på at lave en fold ud menu med denne kode:

$result_omraader = mysql_query("SELECT sd.system_demo_id,
                                      sd.admin_menu_id,
                                      sd.demotekst,
                                      date_format(sd.oprettet, '%d.%m.%Y %H:%i') AS oprettet2,
                                      sd.synlig,
                                      sd.sort,
                                   
                                      am.admin_menu_id,
                                      am.omrade_id,
                                      am.navn AS menunavn,
                                   
                                      ao.admin_omrade_id,
                                      ao.navn AS omraadenavn
                                 
                                      FROM system_demo sd, admin_menu am, admin_omrade ao
                                      WHERE sd.admin_menu_id = am.admin_menu_id
                          AND am.omrade_id = ao.admin_omrade_id
                                      GROUP BY ao.admin_omrade_id
                          ORDER BY sd.sort ASC
                    ") or die ("Fejl systemdemo: 001 ".mysql_error());

if (mysql_num_rows($result_omraader) > 0) {
    while($omraade = mysql_fetch_assoc($result_omraader)) {
     
      echo $omraade['omraadenavn'];  // Her skulle der så være et lukket div
      echo $omraade['admin_omrade_id'];


            // Når der blir klikket på ovenstående åbner undermenuer her:
                // Måske med en ny databasekørsel ?
              echo $omraade['menunavn'];

}}

Jeg ved ikke helt om det er metoden med divoppen ?
Avatar billede artico Novice
05. november 2011 - 00:57 #12
Manne tanks ronols.. så har jeg endelig fået hul i gennem og er på rette vej.. send svar ....
Avatar billede olsensweb.dk Ekspert
05. november 2011 - 11:34 #13
godt du kom på rette vej
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