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

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

Strict Standards: Resource ID#37 used as offset, casting to integer (37) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: Версия для печати :: Установка обработчиков событий
ТвойWeb » WebMaster класс » JavaScript » Установка обработчиков событий

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

1. KROt - 27 Июня, 2008 - 10:41:45 - перейти к сообщению
Возникла проблема с динамической установкой обработчиков событий.
Напишу сразу код, он простой, вы сразу его поймёте:
Есть некий элемент (например, картинка)
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 там указывает чёрти-знает куда, только не на тот элемент, из которого вызвался обработчик.
2. Furax - 27 Июня, 2008 - 11:12:55 - перейти к сообщению
Попробуй через event.srcElement.
3. KROt - 27 Июня, 2008 - 11:21:51 - перейти к сообщению
В рот мне ноги! Спасибо, Furax! Подмигивание
4. KROt - 27 Июня, 2008 - 12:48:24 - перейти к сообщению
Хм, странно... Теперь даже event.srcElement в IE не пашет (не конкретно в том примере, а в моей библиотеке), свойство event.srcElement.id выдаёт просто пустую строку Не понял
5. Furax - 27 Июня, 2008 - 23:26:28 - перейти к сообщению
Не забывай, что event не всегда доступен просто так: некоторые браузеры передают его в функцию-обработчик в виде параметра.

Приведи код, который не работает.
6. Systemnik - 28 Июня, 2008 - 00:46:35 - перейти к сообщению
Цитата:
некоторые браузеры передают его в функцию-обработчик в виде параметра.

Угу addEventListener() именно так и делает только чтобы получить объект-цель события нужно заюзать target Подмигивание
7. Systemnik - 28 Июня, 2008 - 00:51:02 - перейти к сообщению
Слушай.. KROt какой-то странный у тебя скрипт а почему так:
CODE:
addEvent("pic","click",function() {
alert(this.id);
});

а не так:
CODE:
addEvent("pic","click",function(evt) {
alert(evt.target.id);
});
8. KROt - 28 Июня, 2008 - 14:20:02 - перейти к сообщению
Systemnik
Не странный, а нормальный.

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

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


В общем проблему я обошёл, переписав алгоритм скрипта. С srcElement я бился часа 2.5, так ничего и не сделал... Как обычно, не работает только в Internet Explorer. Если честно, мелкомягкие уже замучали - что-нибудь, но обязательно не будет работать так, как надо Хм
9. Systemnik - 29 Июня, 2008 - 00:17:10 - перейти к сообщению
Цитата:
Может ты не в курсе, но target в IE не работает:

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

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

Пробовал?
10. Furax - 29 Июня, 2008 - 01:25:52 - перейти к сообщению
Как можно присвоить результату функции в JavaScript?

Форум на AlfaSpace.NET


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

[Script Execution time: 0.0385]     [ 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