<!-- Функцию ShowID нельзя менять -->
<script language="javascript">
function ShowID(e,id)
{
alert(e.keyCode+" pressed in element "+id);
}
</script>
<input id="test1" type="text" onkeyup="java script: return ShowID(event,this.id);">
Создание динамического обработчика события с произвольным интерфейсом
Суть вопроса:
Задаю обработчик через свойство HTML тега.
При вводе текста выводит сообщение типа "65 pressed in element test1":
Код:
Необходимо задать обработчик динамически (т.к. нет доступа на редактирование ни к функции 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.onkeyup=ShowID;
</script>
<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.onkeyup=ShowID;
</script>
Как правильно задать функцию для обработчика, если нужно передать еще и параметр ID?
В первом случае работает, а во втором нет (проверено в IE - в firefox'е вроде бы работает).
addEventListener ?
Цитата: 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?
Код:
<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>
<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 ссылается на страницу. в нормальных на элемент, вызвавший функцию. Поетому такие костыли.
Цитата: arrjj
В ie нет addEventListener в нормальных браузерах нет attachEvent. В ie this ссылается на страницу. в нормальных на элемент, вызвавший функцию. Поетому такие костыли.
Большое спасибо, выручили! ;)
А я уж было хотел как здесь сделать или через Замыкание (программирование) (по советам на том же habrahabr).
:cool: