clientWidth при инициализации элемента 0
Здравствуйте! Есть класс для создания никого элемента интерфейса пользователя. Элемент создается по нажатию мышки. Размеры задаются через CSS
function Box(Class){ var obj=this; this.Class=(Class)?Class:'Def'; this.body=document.createElement('div'); document.body.appendChild(this.body); this.body.className=this.Class; this.body.setAttribute('data-GUIclass','Seeker'); this.h=this.body.clientHeight;//оно 0 this.w=this.body.clientWidth;//оно тоже 0 } var Box=new Box(); ну если чуть позже опросить размеры то все нормально. что делать? Оо размеры нужны для формировании остальных элементов( Помогите) |
Цитата:
Цитата:
Цитата:
|
Цитата:
Нужно получить размеры div что создается в "конструкторе" ну или просто в теле функции Box. В Css для этого div задано width:100px;height:100px; допустим. Как мне их получить внутри функциии Box? Они там 0 почему то. |
Цитата:
|
Найдите два отличия и пойми почему так получается:
<style type="text/css"> .name { border: 1px solid; float: left; margin: 5px; text-align: center; width: 100px; height: 22px; } </style> <script type="text/javascript"> window.onload = function(){ document.onclick = function(){ (new function(){ this.create = function(name){ var div = document.createElement('div'); div.className = name ? name : 'def'; var width = window.getComputedStyle(div, null).width || div.currentStyle.width; var height = window.getComputedStyle(div, null).height || div.currentStyle.height; div.innerHTML = width + ' / ' + height; div.setAttribute('data-GUIclass','Seeker'); return document.body.appendChild(div); }; return this; }).create('name'); }; }; </script> <style type="text/css"> .name { border: 1px solid; float: left; margin: 5px; text-align: center; width: 100px; height: 22px; } </style> <script type="text/javascript"> window.onload = function(){ var object = new function(){ this.create = function(name){ var div = document.createElement('div'); div.className = name ? name : 'def'; div.setAttribute('data-GUIclass','Seeker'); return document.body.appendChild(div); }; return this; }; document.onclick = function(){ object.create('name'); var div = document.getElementsByTagName('div'), i = div.length; while(i--){ div[i].innerHTML = div[i].clientWidth+'px' + ' / ' + div[i].clientHeight+'px'; } }; }; </script> |
Интересное решение) Но почему то в Chrome не пашет -"Cannot read property 'width' of undefined" , но в FF все норм... будем разбираться..Спасибо за Ваши труды! Респект!
|
Цитата:
|
Вот блин, не в том была собака зарыта у меня. Смотрю же что у Вас свойства clientWidth нормально возвращают размеры в теле , стал рыть что ж не так с моим кодом. Оказалось на момент использования этих свойств div привязан к родителю div другого объекта , но div-родитель вставляется в DOM позже ...выходит цепочка с div не приатачена никуда еще, когда я вызываю clientWidth и возвращает 0. Хотя я не понимаю почему не может браузер дать размеры объекта который не в DOM дереве пока. Единственый выход сразу все атачить к document.body, а потом переатачить куда надо..Спасибо )
|
Цитата:
|
ну можно было бы считать размеры на основе CSS правил для него, что применяются для элемента в независимости от родителей элемента div.Class1{}, все ровно бы переменялся к div с классом Class1, где бы не стоял он в DOM, а потом когда бы вставляли в DOM его пересчитать размеры...Короче меня бы в разработчики браузеров )))):lol:
|
Часовой пояс GMT +3, время: 00:27. |