Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > Порядок выполнения функций на событие


Автор: fclmfan 23.11.2009, 10:40
здрасьте всем!!!
добавляю функцию динамически. как сделать так чтобы она выполнялась вначале, перед статической? а то в этом примере при клике выполняется сначала alert(1), а уж потом alert(2), а надо наоборот....
Код

<!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=windows-1251" />
<title>Untitled Document</title>
<script>
function init(){
    var frm=document.fm;
    frm.btn1.attachEvent("onclick", function(){alert(2)});
}
</script>
</head>

<body onload="init()">
<form name="fm">
    <input type="button" name="btn1" value="btn1" onclick="alert(1)" />
</form>
</body>
</html>

Автор: Aliance 23.11.2009, 12:48
Порядок не указать никак. Более того, не стоит полагать, что добавив две функции на одно и тоже событие одинаковым способом 2 раза подряд - обязательно одна всегда будет выполняться первой — это не так!
В Вашем примере можно было бы сделать примерно так:
Код

<!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=windows-1251" />
<title>Untitled Document</title>
<script>
function init(){
    var frm=document.fm;
    // запоминаем что уже есть у элемента
    var tmpClick = frm.btn1.onclick;
    // удаляем это
    frm.btn1.detachEvent("onclick");
    // добавляем свое, а потом вызываем что было
    frm.btn1.attachEvent("onclick", function(){alert(2);tmpClick();});
}
</script>
</head>
<body onload="init()">
<form name="fm">
    <input type="button" name="btn1" value="btn1" onclick="alert(1)" />
</form>
</body>
</html>


Написал на псевдо JS, код не рабочий, идея пояснена в комментариях.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)