Показать сообщение отдельно
  #5 (permalink)  
Старый 03.03.2014, 12:03
Аватар для Hapson
Кандидат Javascript-наук
Отправить личное сообщение для Hapson Посмотреть профиль Найти все сообщения от Hapson
 
Регистрация: 23.07.2013
Сообщений: 122

Вот полный код библиотеки обработчика:
EventHandler = (function(){
	var guid = 0;
	
	function fixEvent(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;
	}
	
	/* Вызывается в контексте элемента всегда this = element */
	function commonHandle(event){
		event = 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();
			}
		}
	}
  
	return {
		add: function(elem, type, handler){
			if(typeof elem == "undefined"){return;}
			if(elem.setInterval && (elem != window && !elem.frameElement)){
				elem = window;
			}
			if(!handler.guid){
				handler.guid = ++guid;
			}
			if (!elem.events){
                                // вот здесь ни один IE ничего не добавляет
				elem.events = {};
                                // дальше тоже
				elem.handle = function(event){
					if(typeof EventHandler !== "undefined"){
						return 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 || (handlers[handler.guid] != handler)){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){ // IE
				elem.removeAttribute("handle");
				elem.removeAttribute("events");
			}
		} 
	}
}())


Собственно проблему решил - просто сразу присваивал функцию на onreadystatechange. Ну можно еще readystate проверять по таймауту.
Но все же интересно почему ишаки так себя ведут
Ответить с цитированием