Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.04.2013, 12:00
Аватар для 9xakep
сегодня в 12:34|Комментир
Отправить личное сообщение для 9xakep Посмотреть профиль Найти все сообщения от 9xakep
 
Регистрация: 12.04.2011
Сообщений: 1,180

Как узнать какие обработчики висят на элементе?
<div id='test'>123</div>

<script>
	document.getElementById('test').addEventListener('click', function () {
		alert(this.innerHTML)
	}, false)
	
		document.getElementById('test').addEventListener('mouseout', function () {
		alert(this.innerHTML)
	}, false)

// Как получить эти обработчики?
</script>
__________________
оляля, ололо
Ответить с цитированием
  #2 (permalink)  
Старый 12.04.2013, 12:34
что-то знаю
Отправить личное сообщение для 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
Ответить с цитированием
  #3 (permalink)  
Старый 12.04.2013, 12:57
Аватар для megaupload
Профессор
Отправить личное сообщение для megaupload Посмотреть профиль Найти все сообщения от megaupload
 
Регистрация: 18.01.2013
Сообщений: 1,098

Нельзя это сделано для отсутствия конфликтов между скриптами, таким образом разные скрипты могут вешать свои листенеры о которых другие скрипты не будут знать и не смогут снять. кэп.

но КАЖДЫЙ скрипт МОЖЕТ снять свой листенер (если захочет) так как он может сохранить на него ссылку, комбокэп.


но разумеется ты можешь проксировать метод addEventListener заменив его в самом начале страницы на свой хакнутый)

Последний раз редактировалось megaupload, 12.04.2013 в 13:01.
Ответить с цитированием
  #4 (permalink)  
Старый 12.04.2013, 13:27
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Сообщение от megaupload
…кэп…комбокэп…
http://www.w3.org/TR/2001/WD-DOM-Lev...ntListenerList
http://www.w3.org/TR/2002/WD-DOM-Lev...8/changes.html
http://lists.w3.org/Archives/Public/...8Apr/0066.html
жаль нигде не реализовано

Последний раз редактировалось Octane, 12.04.2013 в 13:30.
Ответить с цитированием
  #5 (permalink)  
Старый 12.04.2013, 14:27
Аватар для megaupload
Профессор
Отправить личное сообщение для megaupload Посмотреть профиль Найти все сообщения от megaupload
 
Регистрация: 18.01.2013
Сообщений: 1,098

реализуй лол)
Ответить с цитированием
  #6 (permalink)  
Старый 12.04.2013, 14:29
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от Octane
жаль нигде не реализовано
ну дык реализовать не проблема. понятно что не будет нативно.. Но возможности есть. Хотя со старыми ИЕ придется повозится.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #7 (permalink)  
Старый 12.04.2013, 15:42
Аватар для 9xakep
сегодня в 12:34|Комментир
Отправить личное сообщение для 9xakep Посмотреть профиль Найти все сообщения от 9xakep
 
Регистрация: 12.04.2011
Сообщений: 1,180

Сообщение от megaupload

но разумеется ты можешь проксировать метод addEventListener заменив его в самом начале страницы на свой хакнутый)
лол
ты меня навел на мысль...
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Документ без названия</title>
</head>

<body>
<div id='test'>123</div>
<div id='res'></div>
<script>
var hash = {}
Element.prototype.addEvent = function (type, handler, bool) {
	
	var elem = this+'';
	
	if (!hash[elem]) {
		hash[elem] = {};
		hash[elem].index = 0;
	} else hash[elem].index++;
	
	
	if (!hash[elem].type) {
		hash[elem].type = {};
	}
	hash[elem].type[hash[elem].index] = type
	
	if (!hash[elem].handler) {
		hash[elem].handler = {}
	}
	hash[elem].handler[hash[elem].index] = ''+handler;
	
	
	if (this.addEventListener) {
			this.addEventListener(type, handler, bool);
	} else this.attachEvent('on' + type, handler);
	
}

Element.prototype.getEvents = function (id) {
	
	var elem = this+'';
	document.getElementById(id).innerHTML = 
	(function () {
		var result = '';
		for (i=0;i<=hash[elem].index;i++) {
			
			result += (i+1) +') <br> Type: '+ hash[elem].type[i];
			result += '<br> Handler: <br><pre>' + hash[elem].handler[i]
			result += '</pre><br>'
			
		}
		return result;
	}) ()
	
}

document.getElementById('test').addEvent('click', function () {
	alert(this.innerHTML)
}, false);

document.getElementById('test').addEvent('mouseout', function () {
	alert(this.innerHTML)
}, false);

document.getElementById('test').getEvents('res')

</script>
</body>
</html>


Кстати никто не знает как сохранить табуляцию?
<div id='res'></div>
<script>
var a = 'b	c	b';
alert(/\t/g.test(a)) // true, табы есть
res.innerHTML = a.replace(/\t/g,'   ');
</script>

===
Использовал тег <pre>
__________________
оляля, ололо

Последний раз редактировалось 9xakep, 12.04.2013 в 15:54.
Ответить с цитированием
  #8 (permalink)  
Старый 12.04.2013, 16:40
Аватар для megaupload
Профессор
Отправить личное сообщение для megaupload Посмотреть профиль Найти все сообщения от megaupload
 
Регистрация: 18.01.2013
Сообщений: 1,098

вообще-то события ишака фиксятся так

Element.prototype.addEventListener = Element.prototype.addEventListener ||
function(){
    alert('я ишак')
}


или Node не помню уже
Ответить с цитированием
  #9 (permalink)  
Старый 12.04.2013, 21:54
Аватар для 9xakep
сегодня в 12:34|Комментир
Отправить личное сообщение для 9xakep Посмотреть профиль Найти все сообщения от 9xakep
 
Регистрация: 12.04.2011
Сообщений: 1,180

megaupload,
я моем примере по-любому придется использовать другую функцию, иначе будет рекурсия (если я внутри addEventListener'a буду вызывать addEventListener)

Что означает проксировать функцию?
__________________
оляля, ололо

Последний раз редактировалось 9xakep, 12.04.2013 в 21:57.
Ответить с цитированием
  #10 (permalink)  
Старый 12.04.2013, 22:06
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,563

Сообщение от 9xakep Посмотреть сообщение
megaupload,
я моем примере по-любому придется использовать другую функцию, иначе будет рекурсия (если я внутри addEventListener'a буду вызывать addEventListener)

Что означает проксировать функцию?
addEventListenerOld = Element.prototype.addEventListener; //addEventListenerOld проксирует в себе addEventListener
Element.prototype.addEventListener = function(){
    //злобные хакерские действия
    addEventListenerOld.apply(this, [].slice.call(arguments))
}


Хотя нынче модно поступать так(используя замыкание):
Element.prototype.addEventListener = function(addEventListenerOld){
    return function(){
        //злобные хакерские действия
        addEventListenerOld.apply(this, [].slice.call(arguments))
    }
}(Element.prototype.addEventListener);
__________________
29375, 35

Последний раз редактировалось Aetae, 12.04.2013 в 22:08.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по jquery - как узнать какой тэг? APL Общие вопросы Javascript 7 09.06.2016 15:22
Как узнать какой скрипт вызывается при клике по эленету (если это прямо не прописано) Dmitriy Komar Events/DOM/Window 4 08.12.2011 17:21
Массивы. Как узнать ключ, зная значение? jsuse Общие вопросы Javascript 4 24.11.2011 19:03
Как узнать подключен ли JavaScript у пользователя? frost18 Элементы интерфейса 1 26.10.2011 17:16
Как узнать о том, что флэш уже загрузился. Snipe Общие вопросы Javascript 4 29.01.2009 11:21