АХТУН!!! Добавление, удаление событий кто поможет?
Я прочитал статью
http://javascript.ru/tutorial/events/crossbrowser но мой ясный ум не стал от нее яснее кто мне поможет преобразовать этот код в ясный формат, сделать более подробный мануал и преподать жаждующим в разливном виде? конечный результат должен выглядеть вот так вот var e={ cache:{}, add:function() { //сюда }, del:function() { //сюда } }; в cache нужно сохранять добавленные элементы с их событиями ну еще во из статьи event поменять бы на е: впрочем это не так важно есть кто не ленивый, трудолюбивый, с небольшим количеством гордости и стремления помочь? :) вот такой вот говнокод советовать не нужно :lol: var addevent=function(obj, e, h) { if (obj.addEventListener) { obj.addEventListener(e, h, false); } else if (obj.attachEvent) { obj.attachEvent('on'+e, h); } else { obj['on'+e]=function() { h(); }; } } Что вы поучите взамен если поможете с разжовыванием? очень понятный фрейм ворк, (не смотря на jquery), возможность оценить который вы сможете только после просветления моего светлого ума :) делал на одном дыхании и вдруг дыхание кончилось, подкиньте воздуха! :help: |
А зачем кому-то может понадобиться "очень понятный фрейм ворк" от человека, который не может разобраться в статье?
И зачем просветлять ум, который и так "светлый"? P.S. Поменьше слов, побольше кода с пометками что где непонятно. |
задачу фигово поставили.
|
Проверьте пожалуйста код:
Переписал этот (сам код не менял, только стиль написания) http://javascript.ru/files/event/event.js Но он почемуто перестал работать в IE Кто сможет обьяснить почему??? var $e={ guid:0, fixEvent:function (event) { event = event || window.event; if(event.isFixed) { return event; } event.isFixed = true; event.preventDefault = event.preventDefault || function(){this.returnValue = false}; event.stopPropagation = event.stopPropagaton || function(){this.cancelBubble = true}; if(!event.target) { event.target = event.srcElement; } if(!event.relatedTarget && event.fromElement) { event.relatedTarget = event.fromElement == event.target ? event.toElement : event.fromElement; } 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); } if(!event.which && event.button) { event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) )); } return event; }, commonHandle:function (event) { event = _$$.$e.fixEvent(event); var handlers = this.events[event.type]; for(var g in handlers) { var handler = handlers[g]; var ret = handler.call(this, event); if(ret === false) { event.preventDefault(); event.stopPropagation(); } } }, add:function(elem, type, handler) { if(elem.setInterval && (elem != window && !elem.frameElement)) { elem = window; } if(!handler.guid) { handler.guid = ++_$$.$e.guid; } if(!elem.events) { elem.events = {}; elem.handle = function(event) { if(typeof Event !== "undefined") { return _$$.$e.commonHandle.call(elem, event); } } } if(!elem.events[type]) { elem.events[type] = {}; if(elem.addEventListener) { elem.addEventListener(type, elem.handle, false); } else if(elem.attachEvent) { elem.attachEvent("on" + type, elem.handle); } } elem.events[type][handler.guid] = handler; }, remove:function(elem, type, handler) { var handlers = elem.events && elem.events[type]; if(!handlers) return; delete handlers[handler.guid]; for(var any in handlers) { return; } if(elem.removeEventListener) { elem.removeEventListener(type, elem.handle, false); } else if(elem.detachEvent) { elem.detachEvent("on" + type, elem.handle); } delete elem.events[type]; for(var any in elem.events) { return; } try { delete elem.handle; delete elem.events; } catch(e) { elem.removeAttribute("handle"); elem.removeAttribute("events"); } } } |
Часовой пояс GMT +3, время: 00:17. |