12.04.2013, 12:00
|
|
сегодня в 12:34|Комментир
|
|
Регистрация: 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>
__________________
оляля, ололо
|
|
12.04.2013, 12:34
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
|
|
12.04.2013, 12:57
|
|
Профессор
|
|
Регистрация: 18.01.2013
Сообщений: 1,098
|
|
Нельзя это сделано для отсутствия конфликтов между скриптами, таким образом разные скрипты могут вешать свои листенеры о которых другие скрипты не будут знать и не смогут снять. кэп.
но КАЖДЫЙ скрипт МОЖЕТ снять свой листенер (если захочет) так как он может сохранить на него ссылку, комбокэп.
но разумеется ты можешь проксировать метод addEventListener заменив его в самом начале страницы на свой хакнутый)
Последний раз редактировалось megaupload, 12.04.2013 в 13:01.
|
|
12.04.2013, 13:27
|
|
|
Регистрация: 10.07.2008
Сообщений: 3,873
|
|
Последний раз редактировалось Octane, 12.04.2013 в 13:30.
|
|
12.04.2013, 14:27
|
|
Профессор
|
|
Регистрация: 18.01.2013
Сообщений: 1,098
|
|
реализуй лол)
|
|
12.04.2013, 14:29
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Сообщение от Octane
|
жаль нигде не реализовано
|
ну дык реализовать не проблема. понятно что не будет нативно.. Но возможности есть. Хотя со старыми ИЕ придется повозится.
|
|
12.04.2013, 15:42
|
|
сегодня в 12:34|Комментир
|
|
Регистрация: 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.
|
|
12.04.2013, 16:40
|
|
Профессор
|
|
Регистрация: 18.01.2013
Сообщений: 1,098
|
|
вообще-то события ишака фиксятся так
Element.prototype.addEventListener = Element.prototype.addEventListener ||
function(){
alert('я ишак')
}
или Node не помню уже
|
|
12.04.2013, 21:54
|
|
сегодня в 12:34|Комментир
|
|
Регистрация: 12.04.2011
Сообщений: 1,180
|
|
megaupload,
я моем примере по-любому придется использовать другую функцию, иначе будет рекурсия (если я внутри addEventListener'a буду вызывать addEventListener)
Что означает проксировать функцию?
__________________
оляля, ололо
Последний раз редактировалось 9xakep, 12.04.2013 в 21:57.
|
|
12.04.2013, 22:06
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,583
|
|
Сообщение от 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.
|
|
|
|