Показать сообщение отдельно
  #8 (permalink)  
Старый 07.03.2009, 20:35
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

Сообщение от no.
Как эта обертка делается?
Я использую такую обертку:
/**
 * Объявляем и сразу вызываем функции,
 * чтоб не проверять поддержку методов
 * каждый раз:
 */
var addEventListener = function() {
	// Если браузер IE:
	if (window.attachEvent)
		// Возвращаем функцию для IE:
		return function(element, event, callback) {
			// Фиксуем callback, чтоб установить правильный
			// this, и передавать объект события первым параметром:
			callback.__callbackfix = function() {
				callback.call(element, window.event);
			};
			// Устанавливаем обработчик (не забываем про "on")
			return element.attachEvent("on" + event, callback.__callbackfix);
		}
	// Если браузер W3C-совместим:
	if (window.addEventListener)
		// Возвращаем функцию без фиксов:
		return function(element, event, callback) {
			// Последний параметр всегда false, для совместимости с IE:
			return element.addEventListener(event, callback, false);
		}
}();

var removeEventListener = function() {
	// Если браузер IE:
	if (window.detachEvent)
		return function(element, event, callback) {
			// Удаляем наш сохраненный в функции фикс:
			return element.detachEvent("on" + event, callback.__callbackfix);
		}
	// Если браузер W3C-совместим:
	if (window.addEventListener)	
		return function(element, event, callback) {
			// Удаляем без фиксов:
			return element.removeEventListener(event, callback, false);
		}
}();


Он избавляет от всех проблем несовместимости, кроме тех, которые связаны с различными свойствами объекта события.
Но теперь, по крайней мере, в IE будет возможность удалять callback с фиксом "прозрачно".

Последний раз редактировалось Андрей Параничев, 07.03.2009 в 21:34.
Ответить с цитированием