Strict Standards: Resource ID#18 used as offset, casting to integer (18) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#23 used as offset, casting to integer (23) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#25 used as offset, casting to integer (25) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#26 used as offset, casting to integer (26) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: Установка обработчиков событий
ТвойWeb ТвойWeb
Качественный Европейский хостинг
Форум для чайников
 Чат на форуме      Помощь      Поиск      Пользователи


 Страниц (2): [1] 2 » 

> Описание: проблемко в IE...
KROt
Отправлено: 27 Июня, 2008 - 10:41:45
Post Id



Java-скриптер


Покинул форум
Сообщений всего: 72
Дата рег-ции: Авг. 2006  

Карма 0




Возникла проблема с динамической установкой обработчиков событий.
Напишу сразу код, он простой, вы сразу его поймёте:
Есть некий элемент (например, картинка)
CODE:
<img src="picture.jpg" width="400" height="300" id="pic">

Вешаем на него обработчик событий, используя DOM-методы
CODE:
function addEvent(obj,evnt,func) {
obj = document.getElementById(obj);
if(typeof obj.addEventListener != "undefined") {
obj.addEventListener(evnt,func,false);
} else if(typeof obj.attachEvent != "undefined") {
obj.attachEvent("on" + evnt,func);
} else {
obj["on" + evnt] = func;
}
}

Ну а теперь сама вешалка
CODE:
addEvent("pic","click",function() {
alert(this.id);
});

Простецкий пример - при нажатии на картинку вылезает сообщение с идентификатором этой самой картинки. Работает везде, кроме IE, там выводится undefined... Кто-нибудь с этим сталкивался? Что посоветуете? Собственно, проблема в том, что параметр this там указывает чёрти-знает куда, только не на тот элемент, из которого вызвался обработчик.
 
 Top
Furax
Отправлено: 27 Июня, 2008 - 11:12:55
Post Id



Бледнотик


Покинул форум
Сообщений всего: 1472
Дата рег-ции: Март 2007  
Откуда: Иркутск, Сибирь, СССР

Карма 32




Попробуй через event.srcElement.
 
 Top
KROt
Отправлено: 27 Июня, 2008 - 11:21:51
Post Id



Java-скриптер


Покинул форум
Сообщений всего: 72
Дата рег-ции: Авг. 2006  

Карма 0




В рот мне ноги! Спасибо, Furax! Подмигивание
 
 Top
KROt
Отправлено: 27 Июня, 2008 - 12:48:24
Post Id



Java-скриптер


Покинул форум
Сообщений всего: 72
Дата рег-ции: Авг. 2006  

Карма 0




Хм, странно... Теперь даже event.srcElement в IE не пашет (не конкретно в том примере, а в моей библиотеке), свойство event.srcElement.id выдаёт просто пустую строку Не понял
 
 Top
Furax
Отправлено: 27 Июня, 2008 - 23:26:28
Post Id



Бледнотик


Покинул форум
Сообщений всего: 1472
Дата рег-ции: Март 2007  
Откуда: Иркутск, Сибирь, СССР

Карма 32




Не забывай, что event не всегда доступен просто так: некоторые браузеры передают его в функцию-обработчик в виде параметра.

Приведи код, который не работает.
 
 Top
Systemnik Администратор
Отправлено: 28 Июня, 2008 - 00:46:35
Post Id



ExBB Developer Team


Покинул форум
Сообщений всего: 778
Дата рег-ции: Дек. 2007  

Карма 0




Цитата:
некоторые браузеры передают его в функцию-обработчик в виде параметра.

Угу addEventListener() именно так и делает только чтобы получить объект-цель события нужно заюзать target Подмигивание
 
 Top
Systemnik Администратор
Отправлено: 28 Июня, 2008 - 00:51:02
Post Id



ExBB Developer Team


Покинул форум
Сообщений всего: 778
Дата рег-ции: Дек. 2007  

Карма 0




Слушай.. KROt какой-то странный у тебя скрипт а почему так:
CODE:
addEvent("pic","click",function() {
alert(this.id);
});

а не так:
CODE:
addEvent("pic","click",function(evt) {
alert(evt.target.id);
});
 
 Top
KROt
Отправлено: 28 Июня, 2008 - 14:20:02
Post Id



Java-скриптер


Покинул форум
Сообщений всего: 72
Дата рег-ции: Авг. 2006  

Карма 0




Systemnik
Не странный, а нормальный.

Systemnik пишет:
а не так

Может ты не в курсе, но target в IE не работает:
Цитата:
"target.id" - есть null или не является объектом


В общем проблему я обошёл, переписав алгоритм скрипта. С srcElement я бился часа 2.5, так ничего и не сделал... Как обычно, не работает только в Internet Explorer. Если честно, мелкомягкие уже замучали - что-нибудь, но обязательно не будет работать так, как надо Хм

(Отредактировано автором: 29 Июня, 2008 - 02:05:39)

 
 Top
Systemnik Администратор
Отправлено: 29 Июня, 2008 - 00:17:10
Post Id



ExBB Developer Team


Покинул форум
Сообщений всего: 778
Дата рег-ции: Дек. 2007  

Карма 0




Цитата:
Может ты не в курсе, но target в IE не работает:

Да нет скрипт я протестировал,
IE а он тебе нужен? Кстати в IE можно и подругому прикрутить событие
ну например не так:
Цитата:
obj["on" + evnt] = func;

а скажем так:
CODE:
eval("obj.on" + evnt) = func;

Пробовал?

(Отредактировано автором: 29 Июня, 2008 - 00:17:31)

 
 Top
Furax
Отправлено: 29 Июня, 2008 - 01:25:52
Post Id



Бледнотик


Покинул форум
Сообщений всего: 1472
Дата рег-ции: Март 2007  
Откуда: Иркутск, Сибирь, СССР

Карма 32




Как можно присвоить результату функции в JavaScript?
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 2 (гостей: 2, зарегистрированных: 0, скрытых: 0)
« JavaScript »


Все гости форума могут просматривать этот раздел.
Только администраторы и модераторы могут создавать новые темы в этом разделе.
Только администраторы и модераторы могут отвечать на сообщения в этом разделе.



Форум на AlfaSpace.NET


Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.0456]     [ Gzipped ]



Notice: ob_end_flush(): failed to send buffer of ob_gzhandler (1) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/page_tail.php on line 33