Простой вопрос Javascript

Когда я нажимаю на кнопку, в первый раз все работает нормально, но во второй раз ничего не происходит. Почему это?

<form name="alert"><input type="text" name="hour"><input type="text" name="min"><input type="button" value="ok" onclick="budilnik(this.form)">

<script type="text/javascript">
function budilnik(form)
{

budilnik=1;
min=form.min.value;
hour=form.hour.value;
alert (min+' '+hour+' '+budilnik);

}
</script>

Ответ 1

Научитесь использовать Firebug. Это поможет вам в будущем.

budilnik=1;

Это может показаться сумасшедшим, но это переопределяет функцию budilnik в целое число, которое разбивает вашу форму onlick. Если вы предишете этот оператор с ключевым словом var, вы затенете функцию, но не перезапишите ее. Если вы не укажете ключевое слово var, переменные считаются глобальной областью, что может вызвать проблемы (например, это).

Я использовал firebug, чтобы увидеть, что во втором клике "budilnik не определен". Если вы использовали этот инструмент, вы могли бы, вероятно, самостоятельно отладить эту проблему.

Ответ 2

Переменная budilnik затеняет функцию budilnik. Измените имя переменной, и ваша функция должна работать правильно каждый раз.

Подробнее:

Во-первых, JavaScript видит budilink как функцию. Когда budilnik выполняется, значение budilnik заменяется на целое число 1. Таким образом, в следующий раз, когда JavaScript будет исполнен budilink, он пытается выполнить 1 вместо функции, которая была там раньше.

Ответ 3

Поместите ключевое слово var перед вашим именем переменной.

Я тестировал следующий код, и он просто работает:

<form name="alert">
<input type="text" name="hour">
<input type="text" name="min">
<input type="button" value="ok" onclick="budilnik(this.form);">

<script type="text/javascript">
function budilnik(form)
{
    var budilnik=1;
    var min=form.min.value;
    var hour=form.hour.value;
    alert (min+' '+hour+' '+budilnik); 
}
</script>

Ответ 4

Изменить budilnik = 1; to i_budilnik = 1 или какое-либо другое имя переменной.. путем указания budilnik = 1; вы меняете определение из функции в int val.

В качестве альтернативы вы можете попробовать var budilnik = 1; но не уверен, что это решает.