Показать сообщение отдельно
  #6 (permalink)  
Старый 09.10.2011, 21:04
Интересующийся
Посмотреть профиль Найти все сообщения от gordon freeman
 
Регистрация: 29.09.2011
Сообщений: 11

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>
Ответить с цитированием