Как узнать какие обработчики висят на элементе?
<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> |
|
Нельзя это сделано для отсутствия конфликтов между скриптами, таким образом разные скрипты могут вешать свои листенеры о которых другие скрипты не будут знать и не смогут снять. кэп.
но КАЖДЫЙ скрипт МОЖЕТ снять свой листенер (если захочет) так как он может сохранить на него ссылку, комбокэп. но разумеется ты можешь проксировать метод addEventListener заменив его в самом начале страницы на свой хакнутый) |
Цитата:
http://www.w3.org/TR/2002/WD-DOM-Lev...8/changes.html http://lists.w3.org/Archives/Public/...8Apr/0066.html ;) жаль нигде не реализовано |
реализуй лол)
|
Цитата:
|
Цитата:
ты меня навел на мысль... <!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> |
вообще-то события ишака фиксятся так
Element.prototype.addEventListener = Element.prototype.addEventListener || function(){ alert('я ишак') } или Node не помню уже |
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); |
Цитата:
addEventListenerOld.apply(this, arguments) |
Цитата:
|
Цитата:
|
Цитата:
PS: ты наверное путаешь arguments с NodeList |
Цитата:
|
Цитата:
Aetae, спасибо, я тоже думал, что нужнно ее как-то сохранить, а потом использовать, но не додумался) |
Цитата:
В хроме - выбираешь элемент и смотришь в правой панеле |
Цитата:
|
Часовой пояс GMT +3, время: 22:49. |