melky что то он не работает...
причем ошбка таже что и у меня, когда я пытался написать его сам
<html>
<head>
</head>
<body>
<script type="text/javascript">
(function() {
// короткое определение IE
var ie = /*@cc_on@*/0;
//последовательно исполняет все обработчики события для эл-та.
function handleEvent(event) {
// фиксируем событие для IE
if(ie){
event = window.event;
if(!event.target)
event.target = event.srcElement;
event.preventDefault = event.preventDefault || function(){this.returnValue = false}
event.stopPropagation = event.stopPropagaton || function(){this.cancelBubble = true}
// вычислить pageX/pageY
if ( event.pageX == null && event.clientX != null ) {
var html = document.documentElement, body = document.body;
event.pageX = event.clientX + (html && html.scrollLeft || body && body.scrollLeft || 0) - (html.clientLeft || 0);
event.pageY = event.clientY + (html && html.scrollTop || body && body.scrollTop || 0) - (html.clientTop || 0);
}
// записать нажатую кнопку мыши в which для IE
// 1 == левая; 2 == средняя; 3 == правая
if ( !event.which && event.button ) {
event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
}
}
// все обработчики для текущего события
var handlers = this.events[event.type];
// последовательно исполняем их.
for (var i in handlers)
handlers[i].call(this,event);
};
_$$ = {};
_$$.$e = {
add: function(elem, type, handler) {
if (!addEvent.guid) addEvent.guid = 1;
handler.$$guid = addEvent.guid++;
if (!elem.events) elem.events = {};
var handlers = elem.events[type];
if (!handlers) {
handlers = elem.events[type] = {};
if (elem["on" + type]) handlers[0] = elem["on" + type];
}
handlers[handler.$$guid] = handler;
elem["on" + type] = handleEvent;
},
remove: function(elem, type, handler) {
if (elem.events && elem.events[type]) {
delete elem.events[type][handler.$$guid];
}
}
};
})();
_$$.$e.add( document.body, 'click', function(){alert('clicked')})
_$$.$e.add( document.body, 'click', function(){alert('clicked two times')})
_$$.$e.add( document.body, 'click', function(){alert('имя тега ?\n'+this.tagName)})
</script>
</body>
</html>
IE
addEvent - определение отсутсвует
строка 56 символ 14
Файрфокс
консоль ошибок вся забита
В общем задание уже выполнено
Вот что я хотел увидеть
<html>
<head>
</head>
<body>
<input type="button" id="asd">
<input type="button" id="asd2">
<script type="text/javascript">
var _$$={
$e:{
add:function(elem, type, handler) {
// проверка на свойство у обьекта
if(elem.event_list==undefined) elem.event_list = {};
if(elem.event_list[type]==undefined) elem.event_list[type] = [];
// ищем есть ли уже данная функция
var list = elem.event_list[type];
var exist = false;
for(var i in list){
if(list[i]==handler) exist = true;
}
// если не найдена то добавляем
if(!exist){
// доабвляем в общий список функций
elem.event_list[type].push(handler);
// добавляем обработчки событий
elem['on'+type] = function(event){
var event = event||window.event;
// вызываем все функции в списке
var list = this.event_list[type];
for(var i in list){
list[i](event);
}
}
}
},
remove:function(elem, type, handler) {
// если нет функций для данного события то возращаем false
if(elem.event_list==undefined) return false;
if(elem.event_list[type]==undefined) return false;
// ищем искомую функцию
var list = elem.event_list[type];
for(var i in list){
if(list[i]==handler){
// если нашли то удаляем и возращаем true
list = list.splice(i,1);
return true;
}
}
return false;
}
}
}
// Тестим
var $$e=_$$.$e;
var e1 = function(event){alert(1);}
var e2 = function(event){alert(2);}
var e3 = function(event){alert(3);}
// два раза добавляем e1, второе добавление не добавиться
$$e.add(document.getElementById('asd'),'click',e1);
$$e.add(document.getElementById('asd'),'click',e1);
$$e.add(document.getElementById('asd'),'click',e2);
// добавляем и удаляем событие e3
$$e.add(document.getElementById('asd2'),'click',e1);
$$e.add(document.getElementById('asd2'),'click',e3);
$$e.remove(document.getElementById('asd2'),'click',e3);
</script>
</body>
</html>