Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Создание динамического обработчика события с произвольным интерфейсом

64K
20 декабря 2011 года
LGFox
10 / / 26.02.2011
Добрый день.

Суть вопроса:

Задаю обработчик через свойство HTML тега.
При вводе текста выводит сообщение типа "65 pressed in element test1":
 
Код:
<!-- Функцию ShowID нельзя менять -->
<script language="javascript">
function ShowID(e,id)
{
    alert(e.keyCode+" pressed in element "+id);
}
</script>
<input id="test1" type="text" &#111;&#110;keyup="java script: return ShowID(event,this.id);">


Необходимо задать обработчик динамически (т.к. нет доступа на редактирование ни к функции ShowID, ни к тегу <input>, но есть возможность дописать ниже свой код)
Код:
<!-- Функцию ShowID нельзя менять -->
<script language="javascript">
function ShowID(e,id)
{
    alert(e.keyCode+" pressed in element "+id);
}
</script>

<!-- Задать обработчик сразу нет возможности -->
<input id="test1" type="text">
<script language="javascript">
    var test_var=window.document.getElementById("test1");
    test_var.&#111;&#110;keyup=ShowID;
</script>


Как правильно задать функцию для обработчика, если нужно передать еще и параметр ID?
В первом случае работает, а во втором нет (проверено в IE - в firefox'е вроде бы работает).
277
20 декабря 2011 года
arrjj
1.7K / / 26.01.2011
addEventListener ?
64K
20 декабря 2011 года
LGFox
10 / / 26.02.2011
Цитата: arrjj
addEventListener ?



Так ошибка: "e is undefined"..

 
Код:
test_var.addEventListener("onkeyup",ShowID(this.event,test_var.id),false);


Так тоже не работает:
 
Код:
test_var.addEventListener("onkeyup",ShowID,false);


Дело в том, у функции ShowID два параметра:
function ShowID(e,id)
Как передать id?
277
20 декабря 2011 года
arrjj
1.7K / / 26.01.2011
Код:
<html>
<head>
</head>
<body>
<input type=text id="hello">fff</input>
<script language="javascript">
function pressme(e)
{
var caller=e.target||e.srcElement;
alert("Pressed: "+e.keyCode+" on "+caller.id);
};

var el=document.getElementById("hello");
if(el.addEventListener)
el.addEventListener("keyup",pressme,false);
else
el.attachEvent("onkeyup",pressme);
</script>
</body>
</html>


В ie нет addEventListener в нормальных браузерах нет attachEvent. В ie this ссылается на страницу. в нормальных на элемент, вызвавший функцию. Поетому такие костыли.
64K
20 декабря 2011 года
LGFox
10 / / 26.02.2011
Цитата: arrjj

В ie нет addEventListener в нормальных браузерах нет attachEvent. В ie this ссылается на страницу. в нормальных на элемент, вызвавший функцию. Поетому такие костыли.



Большое спасибо, выручили! ;)
А я уж было хотел как здесь сделать или через Замыкание (программирование) (по советам на том же habrahabr).
:cool:

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог