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

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


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