Javascript.RU

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

АХТУН!!! Добавление, удаление событий кто поможет?
Я прочитал статью
http://javascript.ru/tutorial/events/crossbrowser

но мой ясный ум не стал от нее яснее

кто мне поможет преобразовать этот код в ясный формат, сделать более подробный мануал и преподать жаждующим в разливном виде?

конечный результат должен выглядеть вот так вот
var e={
 cache:{},
 add:function() {
  //сюда
 },
 del:function() {
  //сюда
 }
};


в cache нужно сохранять добавленные элементы с их событиями

ну еще во из статьи event поменять бы на е:

впрочем это не так важно

есть кто не ленивый, трудолюбивый, с небольшим количеством гордости и стремления помочь?


вот такой вот говнокод советовать не нужно

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), возможность оценить который вы сможете только после просветления моего светлого ума
делал на одном дыхании и вдруг дыхание кончилось, подкиньте воздуха!

Последний раз редактировалось gordon freeman, 29.09.2011 в 01:40.
Ответить с цитированием
  #2 (permalink)  
Старый 29.09.2011, 11:01
Профессор
Отправить личное сообщение для da_ff Посмотреть профиль Найти все сообщения от da_ff
 
Регистрация: 12.05.2009
Сообщений: 317

А зачем кому-то может понадобиться "очень понятный фрейм ворк" от человека, который не может разобраться в статье?
И зачем просветлять ум, который и так "светлый"?

P.S. Поменьше слов, побольше кода с пометками что где непонятно.
Ответить с цитированием
  #3 (permalink)  
Старый 30.09.2011, 09:54
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

задачу фигово поставили.
Ответить с цитированием
  #4 (permalink)  
Старый 05.10.2011, 11:47
Интересующийся
Посмотреть профиль Найти все сообщения от gordon freeman
 
Регистрация: 29.09.2011
Сообщений: 11

Проверьте пожалуйста код:
Переписал этот (сам код не менял, только стиль написания)
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");
				}
		}
	}
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кто чем пользуется для генерации событий при модульном тестировании? MVH Events/DOM/Window 0 30.12.2010 17:10
Удаление обработчика событий! Даниэль Ноубл Общие вопросы Javascript 1 23.04.2010 17:12
Добавление и удаление полей в форму anoth3r Events/DOM/Window 1 11.09.2009 15:10
кроссбраузерное добавление обработчика событий элементу krinart Events/DOM/Window 5 30.09.2008 04:38