Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Спойлер js не закрывает уже открытые (https://javascript.ru/forum/dom-window/36951-spojjler-js-ne-zakryvaet-uzhe-otkrytye.html)

exage 02.04.2013 02:07

Спойлер js не закрывает уже открытые
 
Есть код
<script type="text/javascript">

function openbox(id){
    display = document.getElementById(id).style.display;

    if(display=='none'){
       document.getElementById(id).style.display='block';
    }else{
       document.getElementById(id).style.display='none';
    }
}
</script>



<div onclick="openbox('box<?php echo $id; ?>'); return false" >box<?php echo $id; ?></div>
<div id="box<?php echo $id; ?>">инфорация1</div>

<div onclick="openbox('box<?php echo $id; ?>'); return false" >box<?php echo $id; ?></div>
<div id="box<?php echo $id; ?>">инфорация2</div>


$id - разные, для первого блока 1, для второго 2.

Нужно сделать так, что бы при открытии второго скрывался первый, а при открытии первого скрывался второй... и так еще куча id..
Как реализовать? помогите пожалуйста

Aetae 02.04.2013 02:24

Самый простой вариант - запоминать предыдущий, примерно так:
<style> .box{display:none} </style>
<script>
function openbox(id){
    *!*var*/!* current= document.getElementById(id).style;
 
    if(current.display === 'block'){
       current.display = '';
    }else{
       current.display = 'block';
    }
    if(openbox.last !== current) {
        openbox.last.display='';
        openbox.last = current;
    }
}
openbox.last = {};
</script>
 
 
<div onclick="openbox('box1'); return false" >box1</div>
<div id="box1" class="box">инфорация1</div>
 
<div onclick="openbox('box2'); return false" >box2</div>
<div id="box2" class="box">инфорация2</div>

exage 02.04.2013 04:14

Огромное спасибо

ekad 17.04.2013 09:02

Ого. Спасибо!

А скажите как сделать чтобы первый был автоматически открытым?

neira 18.04.2013 16:38

Цитата:

Сообщение от ekad (Сообщение 246618)
А скажите как сделать чтобы первый был автоматически открытым?

Действительно как?

Aetae 18.04.2013 21:00

В данном случае проще всего просто вызвать открытие блока в ручную.
<style> .box{display:none} </style>
<script>
function openbox(id){
    var current= document.getElementById(id).style;
  
    if(current.display === 'block'){
       current.display = '';
    }else{
       current.display = 'block';
    }
    if(openbox.last !== current) {
        openbox.last.display='';
        openbox.last = current;
    }
}
openbox.last = {};
</script>
  
  
<div onclick="openbox('box1'); return false" >box1</div>
<div id="box1" class="box">инфорация1</div>
  
<div onclick="openbox('box2'); return false" >box2</div>
<div id="box2" class="box">инфорация2</div>

<script>openbox('box1');</script>
Но вообще этот код сделан на коленке и мне не нравится.)


Часовой пояс GMT +3, время: 19:14.