它只能工作一次。在第二次单击按钮时,没有任何反应。

如果我在budilniki_budilnik上更改var budilnik变量,那么即使一次也无法使用!

问题出在哪里?

<div>
<form name="alert">
    <input type="text" name="hour" />
    <input type="text" name="min" />
    <input type="button" value="ok" onclick="budilnik(this.form)">
</form><font color=#660000 size=20 face=Tahoma><span id="hours"></span>
</div>

<script type="text/javascript">


function budilnik(form) {
  budilnik = 1;
  min = form.min.value;
  hour = form.hour.value;
}

obj_hours = document.getElementById("hours");

function wr_hours() {
  time = new Date();

  time_min = time.getMinutes();
  time_hours = time.getHours();
  time_wr = ((time_hours < 10) ? "0" : "") + time_hours;
  time_wr += ":";
  time_wr += ((time_min < 10) ? "0" : "") + time_min;

  time_wr = time_wr;

  obj_hours.innerHTML = time_wr;

  if (i_budilnik == 1) {

      if (min == time_min) {
          if (hour == time_hours) {
              alert('welldone');
              budilnik = 0;
          }
      }
  }
}
wr_hours();
setInterval("wr_hours();", 1000);
</script>

最佳答案

您调用函数wr_hours();只能使用onclick budilnik调用一次,但是不会再次触及wr_hours。第一次运行代码是因为页面已加载,但是此后,使用onclick时,仅会再次设置min和hour的值。

编辑:您不应将表单称为“警报”,因为这是javascript中的保留字,与变量min相同。还:变量min和hour在函数budilnik中定义,但在此范围之外未知。我还将变量budilnik重命名为全局变量justonce,以确保您可以在budilnik范围之外进行检查。我重写了您的代码:

<html>
<body>
    <div>
        <form name="frm">
            <input type="text" name="hour" />
            <input type="text" name="mins"/>
            <input type="button" value="ok" onclick="justonce=1;">
        </form>
        <font color=#660000 size=20 face=Tahoma><span id="hours"></span></font>
    </div>
</body>
</html>

<script type="text/javascript">
obj_hours=document.getElementById("hours");
justonce=0;

function wr_hours()
{
    time=new Date();

    time_min=time.getMinutes();
    time_hours=time.getHours();

    time_wr=((time_hours<10)?"0":"")+time_hours;
    time_wr+=":";
    time_wr+=((time_min<10)?"0":"")+time_min;

    obj_hours.innerHTML=time_wr;

    if (justonce==1 && frm.mins.value==time_min && frm.hour.value==time_hours) {
            alert('welldone');
            justonce=0;
    }
}

setInterval("wr_hours();",1000);
</script>


您的函数wr_hours可能会短很多:

function wr_hours()
{
    time=new Date();

    obj_hours.innerHTML=("%02d",time.getHours())+":"+("%02d",time.getMinutes());

    if (justonce==1
        && frm.mins.value==time.getMinutes()
        && frm.hour.value==time.getHours()) {
        alert('welldone');
            justonce=0;
    }
}

08-24 19:31