Простой 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>
4 ответа
Научитесь использовать Firebug. Это очень поможет вам в будущем.
budilnik=1;
Это может показаться сумасшедшим, но это переопределяет функцию budilnik на целое число, которое нарушает работу вашей формы. Если вы предваряете это утверждение ключевым словом var
, вы будете затенять функцию, но не перезаписывать ее. Когда вы не указываете var
ключевое слово, переменные, как предполагается, являются глобальной областью действия, которая может вызвать проблемы (как это).
Я использовал firebug, чтобы увидеть, что при втором щелчке "будильник не определен". Если бы вы использовали этот инструмент, вы могли бы, вероятно, решить эту проблему самостоятельно.
Переменная budilnik
отслеживает функцию budilnik
, Измените имя переменной, и ваша функция должна работать правильно каждый раз.
Более подробно:
Во-первых, JavaScript видит budilink
определяется как функция. когда budilnik
выполняется, значение budilnik
перезаписывается целым числом 1. Так что в следующий раз JavaScript будет исполняться budilink
, он пытается выполнить 1 вместо функции, которая была там раньше.
Положить 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>
Смена будильника =1; для i_budilnik=1 или другого имени переменной.. указав budilnik=1; вы меняете определение с функции на int.
В качестве альтернативы вы можете попробовать var budilnik=1; но не уверен, что это решит.