Javascript-форум (https://javascript.ru/forum/)
-   Internet Explorer (https://javascript.ru/forum/css-html-internet-explorer/)
-   -   Некорректная работа get(set)Attribute в IE для элементов img (https://javascript.ru/forum/css-html-internet-explorer/28975-nekorrektnaya-rabota-get-set-attribute-v-ie-dlya-ehlementov-img.html)

back to back 09.06.2012 14:19

Некорректная работа 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 (речь о галерее внизу страницы)

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>



back to back 09.06.2012 14:50

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

Gvozd 09.06.2012 14:55

Цитата:

Сообщение от back to back
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

Цитата:

Сообщение от back to back
выводит в 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

Цитата:

Сообщение от back to back
Вы, я вижу, знаете толк в извращениях Возвращается код, о предназначении которого остается только догадываться.

Собственно конфликты, оч похоже на 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

Цитата:

Сообщение от back to back
бред.

почему?если не вдаваться в подробности и очень грубо- если вы их не задаёте явно(тот момент когда принудительно задаётся высота и ширина) , они вычисляются исходя из того сколько места занимает изображение на странице. а с 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

Цитата:

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

Цитата:

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


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