Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.07.2013, 18:46
Аспирант
Отправить личное сообщение для Василий Б. Посмотреть профиль Найти все сообщения от Василий Б.
 
Регистрация: 01.03.2010
Сообщений: 44

назначение события и this внутри него
объясните поведение, почему в IE this - это window?
нет, я конечно понимаю, что так даже в статье написано на сайте, но почему остальные браузеры this ставят как ссылку на объект, который и породил событие?
кто тут прав?

var click_event = function(e) {
	// В IE this - это window. Не работает в IE!
	alert(this.getAttribute('alt'));

	// А так работает везде
	var event = e || window.event;
	var target = event.target || event.srcElement; 

	alert(target.getAttribute('alt'));
}

if (document.attachEvent) {
	element.attachEvent("onclick", click_event);
} else if (document.addEventListener) {
	element.addEventListener("click", click_event, false);
}
Ответить с цитированием
  #2 (permalink)  
Старый 17.07.2013, 18:49
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

if (document.addEventListener) {
    element.addEventListener("click", click_event, false);
} else if (document.attachEvent) {
    element.attachEvent("onclick", function() {
        click_event.call(window.event.srcElement, window.event);
    });
}
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #3 (permalink)  
Старый 17.07.2013, 19:09
Аспирант
Отправить личное сообщение для Василий Б. Посмотреть профиль Найти все сообщения от Василий Б.
 
Регистрация: 01.03.2010
Сообщений: 44

прикольный код. но вопрос был в том, какое из проведений в моем коде правильное. мне так, для общего развития.
Ответить с цитированием
  #4 (permalink)  
Старый 17.07.2013, 19:18
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от Василий Б.
в моем коде правильное
оба правильные, просто первый исключает старые ИЕ, второй дает возможность их поддерживать.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #5 (permalink)  
Старый 17.07.2013, 19:34
Аспирант
Отправить личное сообщение для Василий Б. Посмотреть профиль Найти все сообщения от Василий Б.
 
Регистрация: 01.03.2010
Сообщений: 44

не понимаю

мне кажется как раз тут IE ведет себя правильно - он ставить this ссылкой на window. в соответствии с этой шпаргалкой.. или я что-то не понимаю?
Ответить с цитированием
  #6 (permalink)  
Старый 17.07.2013, 19:46
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Сообщение от Василий Б. Посмотреть сообщение
не понимаю

мне кажется как раз тут IE ведет себя правильно - он ставить this ссылкой на window. в соответствии с этой шпаргалкой.. или я что-то не понимаю?
addEventListener метод объектов HTMLDocument и HTMLElement

Последний раз редактировалось dmitriymar, 17.07.2013 в 19:51.
Ответить с цитированием
  #7 (permalink)  
Старый 18.07.2013, 11:25
Аспирант
Отправить личное сообщение для Василий Б. Посмотреть профиль Найти все сообщения от Василий Б.
 
Регистрация: 01.03.2010
Сообщений: 44

я понимаю. почему в функции, которая вешается на клик, в FF this устанавливается на объект, на котором произошло событие, а в IE - объект window??
Ответить с цитированием
  #8 (permalink)  
Старый 18.07.2013, 22:42
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Сообщение от Василий Б.
я понимаю. почему в функции, которая вешается на клик, в FF this устанавливается на объект, на котором произошло событие, а в IE - объект window??
потому что
Сообщение от dmitriymar
addEventListener метод объектов HTMLDocument и HTMLElement
а в ие старых свойство event window - делай выводы почему так всё

Последний раз редактировалось dmitriymar, 19.07.2013 в 07:54.
Ответить с цитированием
  #9 (permalink)  
Старый 18.07.2013, 22:55
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Василий Б.
я понимаю. почему в функции, которая вешается на клик, в FF this устанавливается на объект, на котором произошло событие, а в IE - объект window??
Потому что разработчики IE так захотели. А addEventListener придумали позже (основываясь на модели IE), но при этом решили что удобней будет если this будет указывать на объект, чей обработчик вызван.
Ответить с цитированием
  #10 (permalink)  
Старый 19.07.2013, 12:35
Аспирант
Отправить личное сообщение для Василий Б. Посмотреть профиль Найти все сообщения от Василий Б.
 
Регистрация: 01.03.2010
Сообщений: 44

Сообщение от dmitriymar Посмотреть сообщение
потому что

а в ие старых свойство event window - делай выводы почему так всё
проверил в 10 версии - там тоже window
Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как закрыть ShadowBox окно из HTML-кода внутри него Роман Б. Events/DOM/Window 1 16.04.2015 19:52
Получение значения переменной внутри обработчика события jQuery Mbenga Общие вопросы Javascript 2 01.07.2013 10:57
Событие onclick на div, кроме элементов внутри него klev2004 Общие вопросы Javascript 3 04.10.2012 20:33
Передача события обработчику внутри класса SuperDennis Events/DOM/Window 4 29.02.2012 18:41
Обработка события элемента внутри создавшего его объекта pauluss Общие вопросы Javascript 10 10.09.2010 17:01