Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Проблема с ClientHeight (https://javascript.ru/forum/dom-window/33216-problema-s-clientheight.html)

Lasana 14.11.2012 15:42

Проблема с ClientHeight
 
Вложений: 3
Привет!
Такая проблема:
Не могу понять почему неправильно вычисляется размер колонки через ClientHeight, причём во всех браузерах неправильно! Скорей всего либо я чего-то совсем не понимаю, либо глюк вовсе не там, где я его ищу.
Итак.
На сайте есть две колонки, содержание которых наполняется динамически (левая - меню leftmenu, правая - текст mtext). Между ними есть третья колонка, которая по высоте ровняется на большую из этих двух (там "кубики" и их должно быть целое число, поэтому высота этой колонки подгоняется под высоту большей из колонок)

function make_height()  {              
     var text=document.getElementById('mtext');
     var left=document.getElementById('leftmenu');
     if (text.clientHeight>left.clientHeight)   
      { var h=text.clientHeight;        
          }
         else                         
          { var h=left.offsetHeight;
             }                         
     var ost=h%113;                                
     if (ost>0)                                      
     h=(1+(h-ost)/113)*113;                            
     var zen=document.getElementById('zen');             
     zen.height=h+9;                                       
       }


В левой колонке - разворачивающееся меню.
Организовано оно так: пункты подменю спрятаны style="display:none;", при клике на раскрываемом пункте меню их стиль меняется на display:block; При повторном клике - обратно.. Ну, то есть, классика:

function Menu(id)                                        
    { var menu=document.getElementsByName('menu_'+id);    
      var src=document.getElementById(id);
      for (var i=0; i<menu.length; i++)
        {
           if (menu[i].style.display=='none')                              
           { menu[i].style.display='block';
             src.src='tri.gif';                             
        	}                                               
           else                                             
           { menu[i].style.display='none';                  
             src.src='irt.gif';                             
        	}                                               
    	}


Ну понятно: раз кликаешь - меню вываливается, два кликаешь - собирается обратно.
Хочу ж я после этого чтобы ширина средней колонки тоже подгонялась: и когда меню свёрнуто, и когда развёрнуто.
Вставляю в самый конец второй функции вызов первой: make_height();
Теперь, ВНИМАНИЕ!
Когда меню разворачивается, высота левой колонки становится БОЛЬШЕ, высота средней колонки увеличивается на некую высоту H (ну, типа новая высота = старая высота+H).

А когда меню сворачивается, средняя колонка НЕ УМЕНЬШАЕТСЯ, а наоборот увеличивается. Т.е. её размер становится не новая высота=старая высота-H, а опять новая высота = старая высота+H

А надо, чтобы уменьшалась.

В чём глюк?


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