Вход

Просмотр полной версии : Некорректная работа get(set)Attribute в IE для элементов img


back to back
09.06.2012, 14:19
Вопрос, возможно, уже неоднократно обсуждался - но я ничего конкретного не нашел, так что приступим.
Использую библиотеку 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/sushiya-elite-model-look (речь о галерее внизу страницы)

Deff
09.06.2012, 14:38
Тест - Добавьте в конец страницы
<script type="text/javascript" >
var HeigtandWidth_array=[];
$("div.gallery_wrapper li a.cb_nonactive img").each(function(){
HeigtandWidth_array.push($(this).attr("src")+'; H='+$(this).height()+';W='+$(this).width()+'\n');
});
alert(HeigtandWidth_array)
</script>

http://uploads.ru/t/Q/D/K/QDKf9.png (http://uploads.ru/?v=QDKf9.png)

back to back
09.06.2012, 14:50
Добавил, но зачем? Я использую не эти img, а с id="img_cont{каунтер смарти}". А эти картинки - уменьшенные копии для галереи

Gvozd
09.06.2012, 14:55
var img=document.getElementById(sel);
var h=img.getAttribute("height");
var w=img.getAttribute("width");
alert(h); alert(w);
Если уж используете jQuery, то почему бы его не использовать полностью?

var img=$('#+'sel);
var h=$(img).height();
var w=$(img).width();
alert(h); alert(w);

back to back
09.06.2012, 14:58
Так было изначально, потом подумал, может у IE проблемы с jq, мало ли, но результат один, а точнее - его отсутствие

Deff
09.06.2012, 15:10
back to back,
Встройте в картинку onload="CallFunk(this)"

function CallFunk(a) {
alert('W='+a.width+('H='+a.height)

}

Думаю проблема в тестировании размеров: недоуспев подгрузить картинку

Поскольку у превью размеры показываются в ИЕ корректно, отличия картинок ток в загруженности

back to back
09.06.2012, 15:17
выводит в IE те же нули, а в других браузерах нормальные значения

Deff
09.06.2012, 15:22
выводит в IE те же нули, а в других браузерах нормальные значения
:yes: А если так ?
onload="CallFunk($(this))"

function CallFunk(a) {
alert('W='+a.width()+('H='+a.height())

}

Ксать в ИЕ есть траблы с реальными размерами, если картинка скрыта display:none
обычно cкрывают position:absolute;z-index:-2000;

(*Или тестить когда картинка развернута, а не по onload

back to back
09.06.2012, 15:26
Вы, я вижу, знаете толк в извращениях ;) Возвращается код, о предназначении которого остается только догадываться.

back to back
09.06.2012, 15:29
То есть, Вы предлагаете на время обработки попытаться делать ее видимой? Вроде пробовал уже, не помогает

Deff
09.06.2012, 15:29
Вы, я вижу, знаете толк в извращениях Возвращается код, о предназначении которого остается только догадываться.
Собственно конфликты, оч похоже на lightbox

Попробуйте по Варианту 1, изменив скрытие с display:none для пары картинок

Deff
09.06.2012, 15:49
back to back,
Нет - скрывать её не display:none - а position:absolute;z-index:-2000;

для возврата - обнуляем z-index:0;

back to back
09.06.2012, 15:51
Вы оказались правы, но дело не в свойствах самой картинки, none стоит у родительского элемента div, вот IE почему-то и не видит атрибуты вложенных, бред. Спасибо за наводку

dmitriymar
09.06.2012, 16:31
бред.
почему?если не вдаваться в подробности и очень грубо- если вы их не задаёте явно(тот момент когда принудительно задаётся высота и ширина) , они вычисляются исходя из того сколько места занимает изображение на странице. а с display:none её не существует на странице-занимает 0 по высоте и 0 по ширине. так что поведение правильное
http://javascript.ru/tutorial/dom/attributes

back to back
09.06.2012, 16:41
Возвращает нули даже если перед этим я меняю с none на block перед обращением, то есть, в теории, должно считать правильно

dmitriymar
09.06.2012, 16:52
возвращает нули даже если перед этим я меняю с none на block перед обращением, то есть, в теории, должно считать правильно
http://javascript.ru/tutorial/dom/attributes

<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 это не совсем одно и тоже? и не только в ИЕ