Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.12.2008, 22:15
avtorpc
 
Сообщений: n/a

Ошибки обработчика событий onError при загрузке изображений.
Необходимо предзагрузить изображения для галереи.
Делаю это стандартным способом.
totalRis=10;var imge=new Array();var tekct=new Array(); 
function start(){
tekct[1]='Деньги...деньжищи...денюшшки...';
imge[1]= new Image();
imge[1].src='http://avtorpc.narod.ru/foto_gallery/00007251.jpg';
imge[1].onLoad= statusris(1);imge[1].onError=er(1);

tekct[2]='Заплати - спи споконо!';
imge[2]= new Image();
imge[2].src='http://avtorpc.narod.ru/foto_gallery/00007255.jpg';
imge[2].onLoad= statusris(2);imge[2].onError=er(2);
}
function er(nomer){
   alert("Картинка "+nomer+" не загружена");
}

<body onLoad=start()>

При добавление imge[i].onError=er(nomer); происходит следующие 1. Загрузка изображений прерывается 2. Начинает обрабатываться событие onError 3. Событие onLoad не наступает. 4. Если не вставлять обработчик событий на ошибку загрузки картинок все отрабатывает нормально. Для полноты картины хочу добавить что часть скрипта(масив картинок и описаний к нему) генерирую на PHP.
Кто подскажет почему срабатывает обработчик ошибок?

Последний раз редактировалось Андрей Параничев, 25.12.2008 в 22:33. Причина: Пользуйтесь bb-тегами [js] и [html] для оформления листингов кода в теле сообщения
Ответить с цитированием
  #2 (permalink)  
Старый 25.12.2008, 22:36
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

totalRis=10;var imge=new Array();var tekct=new Array(); 
function start(){
tekct[1]='Деньги...деньжищи...денюшшки...';
imge[1]= new Image();
imge[1].src='http://avtorpc.narod.ru/foto_gallery/00007251.jpg';
imge[1].onload = function() {
    statusris(1);
}
imge[1].onerror = function() {
    er(1);
}

tekct[2]='Заплати - спи споконо!';
imge[2]= new Image();
imge[2].src='http://avtorpc.narod.ru/foto_gallery/00007255.jpg';
imge[2].onload= function() {
    statusris(2);
}
imge[2].onerror= function() {
    er(2);
}
}
function er(nomer){
   alert("Картинка "+nomer+" не загружена");
}


Советую прочитать статью про обработчики событий: http://javascript.ru/start/events/intro
Ответить с цитированием
  #3 (permalink)  
Старый 26.12.2008, 00:58
avtorpc
 
Сообщений: n/a

Статью прочитал. Замечательная статья, Но ответа на свою проблему не нашел. Почему одновременно срабатывают два обработчика событий и onload И onerror?
Ответить с цитированием
  #4 (permalink)  
Старый 26.12.2008, 01:18
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

Цитата:
Частая ошибка новичков

Обратите внимание - свойству присваивается именно сама функция-обработчик doSomething, а не doSomething():

document.getElementById('button').onclick = doSomething


doSomething() - это результат запуска функции, а так как вызова return в ее коде нет, то этот результат будет undefined.

Сравните это со свойством. Там - наоборот, скобки нужны:

<input type="button" id="mybutton" onclick="doSomething()"/>


Это различие легко объяснить. Дело в том, что при назначении onclick в HTML браузер автоматически создает функцию-обработчик из содержимого кавычек. Получается, что последний пример - это по сути то же самое, что:

document.getElementById('mybutton').onclick = function() {
     doSomething()  // внутри автосозданной функции
}
Конец цитаты.
Ответить с цитированием
  #5 (permalink)  
Старый 26.12.2008, 03:29
avtorpc
 
Сообщений: n/a

Медленно)))) Но доходит...Пасибо тебе! Остался один вопрос - если при моей ошибке возвращается значение undefined то почему функции работают? По идее они вообще не должны активироваться...
Ответить с цитированием
  #6 (permalink)  
Старый 26.12.2008, 04:40
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

Когда вы описываете обработчик вот так:
element.onclick = somefunction();

То в момент объявления вызывается функция somefunction и обработчику присваивается лишь её результат, а не сама функция.

В данном случае верное присвоение:
element.onclick = somefunction;

Но таким способом невозможно передать параметр.

Поэтому, используется замыкание для вызова нужной функции с параметрами:
element.onclick = function() {
    somefunction(1);
}
Ответить с цитированием
  #7 (permalink)  
Старый 24.01.2009, 01:33
Sergio
 
Сообщений: n/a

последовательность строк в коде
У меня такая последовательность как в ваших кодах, не работает. Просмотрел несколько примеров в инете, там работающаяу меня последовательность такая:

imge[1]= new Image();
imge[1].onload = function() {
statusris(1);
}
imge[1].onerror = function() {
er(1);
}
imge[1].src='http://avtorpc.narod.ru/foto_gallery/00007251.jpg';
Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
кроссбраузерное добавление обработчика событий элементу krinart Events/DOM/Window 5 30.09.2008 04:38