Некорректная работа 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:40. |