Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Потеря переменной при повторении функции ? (https://javascript.ru/forum/misc/5925-poterya-peremennojj-pri-povtorenii-funkcii.html)

Andrei 04.11.2009 15:59

Потеря переменной при повторении функции ?
 
Здравствуйте !
Вот такой код:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>test</title>
</head>
<body onLoad="delta(progress)">

<script type="text/javascript">

var n = 0 ;
function function_a(x){
alert (x);
if (n < 4){
n++;
timeoutId = setTimeout(function_a, 20);
}
}

</script>

<button class="but_menu" onClick="function_a(1)" >test</button></a>
</body>
</html>


Проблема в том что при первом запуске функции она выдаёт x, но при последующих запусках x теряется и выдаёт undefined !
Подскажите в чём проблема ?

e1f 04.11.2009 17:55

timeoutId = setTimeout(
/*begin!*/
function(){function_a(x)}
/*end!*/, 20);

Andrei 04.11.2009 18:12

Понятно , спасибо !
И ещё вопрос можно onClick в кнопке не писать, а сразу в js как то так:
document.getElementById('but_1').onClick="test()"; ?

e1f 04.11.2009 18:40

document.getElementById('but_1').onclick = test

Andrei 04.11.2009 18:48

Неработает ! Может я что не так делаю ?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>test</title>
</head>
<body >

<script type="text/javascript">
function test(){
alert("работает");
}

document.getElementById('but_1').onclick = test;
</script>

<button class="but_menu" id="but_1">Test</button></a>
</body>
</html>

e1f 04.11.2009 18:52

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>test</title>
<script type="text/javascript">
<!--
function test(){
alert("работает");
}
function init() {
document.getElementById('but_1').onclick = test;
}
//-->
</script>
</head>
<body onload="init()"> 
<button class="but_menu" id="but_1">Test</button></a>
</body>
</html>

Andrei 04.11.2009 19:03

А если мне нужно определить какая кнопка была нажата, так можно ? =>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>test</title>

<script type="text/javascript">
<!--
function test(){
if (a == 1){
alert ("кнопка 1 ");
}else if (a == 2){
alert ("кнопка 2 ");
}
}
function init() {
document.getElementById('but_1').onclick = function(){a=1;test();};
document.getElementById('but_2').onclick = function(){a=2;test();};

}
//-->
</script>
</head>
<body onload="init()">
<button class="but_menu" id="but_1">Test</button></a>
<button class="but_menu" id="but_2">Test</button></a>

</body>
</html>

e1f 04.11.2009 19:26

Да, вполне. Но лучше делать не так, а использовать то, что в функции test, вызванной из онклик, this ссылается на элемент-кнопку. И так определять, какая именно нажата.

Andrei 04.11.2009 19:41

Ок, ещё раз спасибо !


Часовой пояс GMT +3, время: 10:33.