Некорректная работа get(set)Attribute в IE для элементов img
Вопрос, возможно, уже неоднократно обсуждался - но я ничего конкретного не нашел, так что приступим.
Использую библиотеку colorbox, для каждого элемента галереи которой ресайзится как содержимое, так и потом подгоняется размер самого colorbox-a. В опере, фф и хроме все работало ок, но проверив IE я обнаружил проблему. После дебага проблема оказалась в: var img=document.getElementById(sel); var h=img.getAttribute("height"); var w=img.getAttribute("width"); alert(h); alert(w); где для всех браузеров выводит корректные значения атрибутов, а в ИЕ выводит 0. img - точно нужный элемент, даже IE правильно выводит его айдишник. Собственно, для элементов div работает корректно, а вот для img нет, так что проблема, наверное, с доступом к атрибутам элемента img . Если сильно туплю(вебом занимаюсь недавно) - можете отвести на мне душу, но ответы по существу приветствуются. Общий код обработчика, который вызывается после загрузки элемента библиотеки: $(document).bind('cbox_load', function(){ var str=$.colorbox.element()[0].getAttribute("href"); var image_index=(str).indexOf("cont")+4; image_index=str.substr(image_index); var sel='img_cont'+image_index; //var sel1='div'+image_index; var img=document.getElementById(sel); //var div=document.getElementById(sel1); var h=img.getAttribute("height"); var w=img.getAttribute("width"); alert(h); alert(w); Прошу прощения, что jquery вперемешку с js, по-всякому экспериментировал. Если что, ссылка - http://stud.lasoon.com.ua/kiev/news/...ite-model-look (речь о галерее внизу страницы) |
|
Добавил, но зачем? Я использую не эти img, а с id="img_cont{каунтер смарти}". А эти картинки - уменьшенные копии для галереи
|
Цитата:
var img=$('#+'sel); var h=$(img).height(); var w=$(img).width(); alert(h); alert(w); |
Так было изначально, потом подумал, может у IE проблемы с jq, мало ли, но результат один, а точнее - его отсутствие
|
back to back,
Встройте в картинку onload="CallFunk(this)" function CallFunk(a) { alert('W='+a.width+('H='+a.height) } Думаю проблема в тестировании размеров: недоуспев подгрузить картинку Поскольку у превью размеры показываются в ИЕ корректно, отличия картинок ток в загруженности |
выводит в IE те же нули, а в других браузерах нормальные значения
|
Цитата:
onload="CallFunk($(this))" function CallFunk(a) { alert('W='+a.width()+('H='+a.height()) } Ксать в ИЕ есть траблы с реальными размерами, если картинка скрыта display:none обычно cкрывают position:absolute;z-index:-2000; (*Или тестить когда картинка развернута, а не по onload |
Вы, я вижу, знаете толк в извращениях ;) Возвращается код, о предназначении которого остается только догадываться.
|
То есть, Вы предлагаете на время обработки попытаться делать ее видимой? Вроде пробовал уже, не помогает
|
Цитата:
Попробуйте по Варианту 1, изменив скрытие с display:none для пары картинок |
back to back,
Нет - скрывать её не display:none - а position:absolute;z-index:-2000; для возврата - обнуляем z-index:0; |
Вы оказались правы, но дело не в свойствах самой картинки, none стоит у родительского элемента div, вот IE почему-то и не видит атрибуты вложенных, бред. Спасибо за наводку
|
Цитата:
http://javascript.ru/tutorial/dom/attributes |
Возвращает нули даже если перед этим я меняю с none на block перед обращением, то есть, в теории, должно считать правильно
|
Цитата:
Цитата:
<head> <meta charset="utf-8"> <title>Документ без названия</title> <style type="text/css"> #apDiv1 { position: absolute; width: 187px; height: 67px; z-index: 1; background-color: #FF0000; } </style> </head> <body> <div id="apDiv1"></div> <script> var a=document.getElementById('apDiv1'); alert(a.getAttribute("height")) alert(a.style.height) a.style.height="10px" alert(a.getAttribute("height")) a.setAttribute("height","100px") alert(a.style.height) alert(a.getAttribute("height")) </script> </body> так понятно что атрибут свойство и стили CSS это не совсем одно и тоже? и не только в ИЕ |
Часовой пояс GMT +3, время: 16:14. |