Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.03.2010, 20:48
Аспирант
Отправить личное сообщение для alexrussia Посмотреть профиль Найти все сообщения от alexrussia
 
Регистрация: 02.03.2010
Сообщений: 31

глюк в Firefox ?
Здравствуйте такая проблема при добавлении в дерево сбиваются значения style.left и style.top (устанавливаются не те значения), самое что интересное только при первом событии клика, второе событие клика проходит правильно. в IE такой проблемы не возникает.
Другими словами при создании объекта img устанавливаются по умолчанию значения style.left и style.top как будто мы не установили im.setAttribute("style").Кроме того возможно при первом событии firefox не учитывает im.height и im.width


отрывок кода:
case "click":
   var im=document.createElement("img");
   var s=g.src; im.src=s.substring(0,s.lastIndexOf('.'))+"kadr"+s.substring(s.lastIndexOf('.'),s.length);
   im.className="imagebig";
   im.setAttribute("name","big");
   im.setAttribute("style","left:"+String((988-im.width)/2)+"px;"+"top:"+String(g.offsetTop-im.height/4)+"px;");
g.parentNode.appendChild(im);
   goonlis(remlis);
   addlis("1",bigimg,im);
   break;

Последний раз редактировалось alexrussia, 17.03.2010 в 21:10.
Ответить с цитированием
  #2 (permalink)  
Старый 17.03.2010, 21:49
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от alexrussia
im.setAttribute("style","left:"+String((988-im.width)/2)+"px;"+"top:"+String(g.offsetTop-im.height/4)+"px;");
im.style.left = String((988-im.width)/2)+"px";
im.style.top = String(g.offsetTop-im.height/4)+"px";
Ответить с цитированием
  #3 (permalink)  
Старый 17.03.2010, 22:07
Аспирант
Отправить личное сообщение для alexrussia Посмотреть профиль Найти все сообщения от alexrussia
 
Регистрация: 02.03.2010
Сообщений: 31

Сообщение от Kolyaj Посмотреть сообщение
im.style.left = String((988-im.width)/2)+"px";
im.style.top = String(g.offsetTop-im.height/4)+"px";
это тоже самое, от этого глюк не исчезнет!
Заметил что typуface выдает "auto" в firebug !
Самое интересное что когда через firebug проходишь строки с установкой стиля - firefox нормально устанавливает позицию элемента!
var xss=document.getElementsByName("big")[0];
if (window.getComputedStyle)
var typeface = window.getComputedStyle(im, null).width;
Ответить с цитированием
  #4 (permalink)  
Старый 17.03.2010, 22:20
Интересующийся
Отправить личное сообщение для Serge Ageyev Посмотреть профиль Найти все сообщения от Serge Ageyev
 
Регистрация: 16.03.2010
Сообщений: 12

Мне кажется что к моменту запроса картинка еще не загрузилась, поэтому ее ширина и не доступна (еще). Как насчет прицепить обработчик события onload к создаваемой картинке и туда перенести нужный код?
Ответить с цитированием
  #5 (permalink)  
Старый 17.03.2010, 22:28
Аспирант
Отправить личное сообщение для alexrussia Посмотреть профиль Найти все сообщения от alexrussia
 
Регистрация: 02.03.2010
Сообщений: 31

Сообщение от Serge Ageyev Посмотреть сообщение
Мне кажется что к моменту запроса картинка еще не загрузилась, поэтому ее ширина и не доступна (еще). Как насчет прицепить обработчик события onload к создаваемой картинке и туда перенести нужный код?
да правильно я уже нашел сам ошибку, но вы меня опередили !!!
у firefox вылетает событие load при загрузке изображений, а у IE нет. поэтому надо или image.complete, но лучше image.onload !!!
решение ошибки:
case "click":
var s=g.src;
var im=document.createElement("img");
im.src=s.substring(0,s.lastIndexOf('.'))+"kadr"+s.substring(s.lastIndexOf('.'),s.length);
im.onload=function(){
im.className="imagebig";
im.setAttribute("name","big"); 
im.setAttribute("style","left:"+String((988-im.width)/2)+"px;"+"top:"+String(g.offsetTop-im.height/3)+"px;");
document.body.appendChild(im);
goonlis(remlis);
addlis("1",bigimg,im);}
break;}
Ответить с цитированием
  #6 (permalink)  
Старый 17.03.2010, 22:30
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от alexrussia
у firefox вылетает событие load при загрузке изображений, а у IE нет.
У всех вылетает, устанавливайте onload до установки src.
Ответить с цитированием
  #7 (permalink)  
Старый 17.03.2010, 22:39
Аспирант
Отправить личное сообщение для alexrussia Посмотреть профиль Найти все сообщения от alexrussia
 
Регистрация: 02.03.2010
Сообщений: 31

Сообщение от Kolyaj Посмотреть сообщение
У всех вылетает, устанавливайте onload до установки src.
в книге "изучаем jquery 1.3 Джонатан чаффер карл шведберг" как раз написано что у ie не вылетает load так как считается что картинка сразу загрузилась. тем более если бы в ie было load то у меня такая же как в firefox была фигня.
необязательно до или после так как это событие ,его можно после или перед ставить разницы нет никакой.
Ответить с цитированием
  #8 (permalink)  
Старый 17.03.2010, 22:53
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Не надо ссылаться на книги по JavaScript, 99% из них не выдерживают никакой критики. Лучше взять и попробовать

(function f(i) {
    var img = new Image();
    img.onload = function() {
        alert('loaded');
        if (i < 3) {
            f(i + 1);
        }
    };
    img.src = 'http://javascript.ru/forum/images/ca_serenity/misc/logo.gif';
})(0);
Ответить с цитированием
  #9 (permalink)  
Старый 17.03.2010, 22:55
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от alexrussia
необязательно до или после так как это событие ,его можно после или перед ставить разницы нет никакой.
До или после чего? Если вы его поставите после того, как оно сработает, вы его не поймаете.
Ответить с цитированием
  #10 (permalink)  
Старый 17.03.2010, 23:45
Аспирант
Отправить личное сообщение для alexrussia Посмотреть профиль Найти все сообщения от alexrussia
 
Регистрация: 02.03.2010
Сообщений: 31

Сообщение от Kolyaj Посмотреть сообщение
До или после чего? Если вы его поставите после того, как оно сработает, вы его не поймаете.
Почему тогда IE дебаггер показывает что onload - не используется ?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Peppy и Firefox Cr@ZyBoY Библиотеки/Тулкиты/Фреймворки 13 14.02.2010 20:38
firefox зависает после обновления страницы constantant Firefox/Mozilla 4 14.09.2009 12:30
Проблемы с MouseMove в FireFox slim-v Events/DOM/Window 5 05.06.2009 02:44
В Mozilla Firefox 3.0 проблемма с Javascript меню artmedia Элементы интерфейса 1 07.09.2008 10:43
FireFox: onmouseover не работает при зажатой кнопке мыши no. Общие вопросы Javascript 4 19.08.2008 13:43