Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   перечислить и изменить Event Listnerы на элементе (https://javascript.ru/forum/events/25915-perechislit-i-izmenit-event-listnery-na-ehlemente.html)

KOLANICH 20.02.2012 01:39

перечислить и изменить Event Listnerы на элементе
 
как перечислить и изменить Event Listnerы на элементе?

Octane 20.02.2012 01:49

Interface EventListenerList не реализован в браузерах

KOLANICH 23.02.2012 15:23

кажется были какие-то методы у узлов, возвращающие список event listenerов

Nekromancer 23.02.2012 18:02

KOLANICH,
Та не было ничего. Просто перед добавлением сохраняйте их сами куда то, как это делаю библиотеки. Ну а потом удаляйте.

KOLANICH 24.02.2012 20:17

немного подумал, и понял, что нужно сделать, чтобы производительность не сильно страдала

KOLANICH 25.02.2012 01:12

не работает...
if (!addEventListenerOriginal) {
	var addEventListenerOriginal = EventTarget.prototype.addEventListener;
	EventTarget.prototype.addEventListener = function (evt, cb, bub) {
		console.log(this, evt, cb, bub);
		
		addEventListenerOriginal.apply(this, arguments);
	}
}
document.body.addEventListener("contextmenu", console.info, true);//не как должно
EventTarget.prototype.addEventListener.call(document.body, "fuuu", console.info, true);//TypeError: addEventListenerOriginal is undefined


if (!addEventListenerOriginal) {
	var addEventListenerOriginal = HTMLElement.prototype.addEventListener;
	HTMLElement.prototype.addEventListener = function (evt, cb, bub) {
		console.log(this, evt, cb, bub);
		
		addEventListenerOriginal.apply(this, arguments);
	}
}
document.body.addEventListener("contextmenu", console.info, true);//работает не как должно
HTMLElement.prototype.addEventListener.call(document.body, "fuuu", console.info, true);//работает как должно

melky 25.02.2012 04:14

Цитата:

Сообщение от KOLANICH (Сообщение 159775)
не работает...
if (!addEventListenerOriginal) {
	var addEventListenerOriginal = EventTarget.prototype.addEventListener;
	*!*EventTarget.prototype.addEventListener*/!* = function (evt, cb, bub) {
		console.log(this, evt, cb, bub);
		
		addEventListenerOriginal.apply(this, arguments);
	}
}
document.body.addEventListener(...);

alert( "addEventListener" in *!*Node.prototype*/!* );

KOLANICH 25.02.2012 15:01

и что вы этим хотели сказать?
там и не должно быть, и вообще база - EventTarget, но там почему-то
EventTarget.prototype.addEventListener пустой

Nekromancer 25.02.2012 16:05

KOLANICH,
Вообще то должно быть. В идеале Node должен наследоваться от EventTarget и иметь addEventListener. Но увы, интерфейс EventTarget в большинстве браузеров реализовал не так как надо. А addEventListener в цепочке прототипов появляются с Element и Document.

KOLANICH 25.02.2012 17:32

Перепробовал и для Element.prototype сделать, результат тот же, что и для HTMLElement.prototype.
Не пашед.

Если немного поразмыслить, то мы должны присваивать значение самому EventTarget, а не его прототипу, ибо он сам и есть прототип.
Это также было опробовано, но не работает.
Почему не работает через HTMLElement.prototype тоже не понятно.
Я вообще ничего не понимаю.


Часовой пояс GMT +3, время: 21:38.