var time = 5;
function dec() {
    time--;
    document.getElementById("time_pad").innerHTML = time;
    if (time == 0) document.getElementById("do_OK").fireEvent("onclick");
}
function sAlert(txt) {
    time = 5;
    window.setInterval("dec()", 1000);
    var shield = document.createElement("DIV");
    shield.id = "shield";
    shield.style.position = "absolute";
    shield.style.left = "0px";
    shield.style.top = "0px";
    shield.style.width = "100%";
    shield.style.height = document.body.scrollHeight + "px";
    shield.style.background = "#333";
    shield.style.textAlign = "center";
    shield.style.zIndex = "10000";
    shield.style.filter = "alpha(opacity=0)";
    shield.style.opacity = 0;
    var alertFram = document.createElement("DIV");
    alertFram.id = "alertFram";
    alertFram.style.position = "absolute";
    alertFram.style.left = "50%";
    alertFram.style.top = "50%";
    alertFram.style.marginLeft = "-225px";
    alertFram.style.marginTop = -75 + document.documentElement.scrollTop + "px";
    alertFram.style.width = "450px";
    alertFram.style.height = "150px";
    alertFram.style.background = "#ccc";
    alertFram.style.textAlign = "center";
    alertFram.style.lineHeight = "150px";
    alertFram.style.zIndex = "10001";
    strHtml = " <ul style=\"list-style:none;margin:0px;padding:0px;width:100%\"> \n";
    strHtml += "  <li style=\"background:#DD828D;text-align:left;padding-left:20px;font-size:18px;font-weight:bold;height:25px;line-height:25px;border:1px solid #F9CADE;\">[提示]:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span id='time_pad' style=\"color:red;font-family:Verdana;font-weight:bold;\">" + time + "</span>秒钟后关闭" + " </li>  \n";
    strHtml += "  <li style=\"background:#fff;text-align:center;font-size:14px;height:120px;line-height:120px;border-left:1px solid #F9CADE;border-right:1px solid #F9CADE;\"> " + txt + " </li> \n";
    strHtml += "  <li style=\"background:#FDEEF4;text-align:center;font-weight:bold;height:25px;line-height:25px; border:1px solid #F9CADE;\"> <input type=\"button\" value=\" 确 定 \" id=\"do_OK\" onclick=\"doOk()\" style=\"width:60px\" /> </li> \n";
    strHtml += " </ul> \n";
    alertFram.innerHTML = strHtml;
    document.body.appendChild(alertFram);
    document.body.appendChild(shield);
    this.setOpacity = function(obj, opacity) {
        if (opacity >= 1) opacity = opacity / 100;
        try { obj.style.opacity = opacity; } catch (e) { }
        try {
            if (obj.filters.length > 0 && obj.filters("alpha")) {
                obj.filters("alpha").opacity = opacity * 150;
            } else {
                obj.style.filter = "alpha(opacity=\"" + (opacity * 150) + "\")";
            }
        } catch (e) { }
    }
    var c = 0;
    this.doAlpha = function() {
        if (++c > 20) { clearInterval(ad); return 0; }
        setOpacity(shield, c);
    }
    var ad = setInterval("doAlpha()", 1);
    this.doOk = function() {
        document.body.removeChild(alertFram);
        document.body.removeChild(shield);
        document.body.onselectstart = function() { return true; }
        document.body.oncontextmenu = function() { return true; }
    }
    document.getElementById("do_OK").focus();
    document.body.onselectstart = function() { return false; }
    document.body.oncontextmenu = function() { return false; }
}
调用dec()时还没有time_pad,怎么能找到?

解决方案 »

  1.   

    window.setInterval("dec()", 1000);
     我试过了,放在最后还是同样的错误
      

  2.   

    function dec() { alert(111)
        time--; 
        document.getElementById("time_pad").innerHTML = time; 
        if (time == 0) document.getElementById("do_OK").fireEvent("onclick"); 

    你会发现这个函数执行了6次
      

  3.   


    楼上的提醒了我,改了一下,var time = 5;
    function dec() {
        if (time == 0) {
            document.getElementById("do_OK").fireEvent("onclick");
        }
        else if (time >= 0) {
            document.getElementById("time_pad").innerHTML = time;
        }
        else {
            return false;
        }
        time--;
    }但好像执行第二次时间在跳跃,根本没有到5秒
      

  4.   


    楼上的提醒了我,改了一下,var time = 5;
    function dec() {
        if (time == 0) {
            document.getElementById("do_OK").fireEvent("onclick");
        }
        else if (time >= 0) {
            document.getElementById("time_pad").innerHTML = time;
        }
        else {
            return false;
        }
        time--;
    }但好像执行第二次时间在跳跃,根本没有到5秒
      

  5.   

    好像还有问题,自动关闭不会出错误,但如果是单击 确定 后就又出现了问题window.setInterval("dec()", 1000); 
    估计还是在这句上,它不能停止执行
      

  6.   

    setInterval(表达式,交互时间) 
    它从载入后,每隔指定的时间就执行一次表达式 
      

  7.   

    要清除计时器<!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>
    <script language="javascript" type="text/javascript" >    function aaa() {
            sAlert("asdfasdfa");
            return false;
        }
        
        var time = 5,timer=null;
    function dec() {
        time--;
        document.getElementById("time_pad").innerHTML = time;
        if (time == 0){
          document.getElementById("do_OK").fireEvent("onclick");
          clearInterval(timer);//================清除计时器,因为你删除
          timer=null;
        }
    }
    function sAlert(txt) {
        time = 5;
        var shield = document.createElement("DIV");
        shield.id = "shield";
        shield.style.position = "absolute";
        shield.style.left = "0px";
        shield.style.top = "0px";
        shield.style.width = "100%";
        shield.style.height = document.body.scrollHeight + "px";
        shield.style.background = "#333";
        shield.style.textAlign = "center";
        shield.style.zIndex = "10000";
        shield.style.filter = "alpha(opacity=0)";
        shield.style.opacity = 0;
        var alertFram = document.createElement("DIV");
        alertFram.id = "alertFram";
        alertFram.style.position = "absolute";
        alertFram.style.left = "50%";
        alertFram.style.top = "50%";
        alertFram.style.marginLeft = "-225px";
        alertFram.style.marginTop = -75 + document.documentElement.scrollTop + "px";
        alertFram.style.width = "450px";
        alertFram.style.height = "150px";
        alertFram.style.background = "#ccc";
        alertFram.style.textAlign = "center";
        alertFram.style.lineHeight = "150px";
        alertFram.style.zIndex = "10001";
        strHtml = " <ul style=\"list-style:none;margin:0px;padding:0px;width:100%\"> \n";
        strHtml += "  <li style=\"background:#DD828D;text-align:left;padding-left:20px;font-size:18px;font-weight:bold;height:25px;line-height:25px;border:1px solid #F9CADE;\">[提示]:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span id='time_pad' style=\"color:red;font-family:Verdana;font-weight:bold;\">" + time + "</span>秒钟后关闭" + " </li>  \n";
        strHtml += "  <li style=\"background:#fff;text-align:center;font-size:14px;height:120px;line-height:120px;border-left:1px solid #F9CADE;border-right:1px solid #F9CADE;\"> " + txt + " </li> \n";
        strHtml += "  <li style=\"background:#FDEEF4;text-align:center;font-weight:bold;height:25px;line-height:25px; border:1px solid #F9CADE;\"> <input type=\"button\" value=\" 确 定 \" id=\"do_OK\" onclick=\"doOk()\" style=\"width:60px\" /> </li> \n";
        strHtml += " </ul> \n";
        alertFram.innerHTML = strHtml;
        document.body.appendChild(alertFram);
        document.body.appendChild(shield);
        this.setOpacity = function(obj, opacity) {
            if (opacity >= 1) opacity = opacity / 100;
            try { obj.style.opacity = opacity; } catch (e) { }
            try {
                if (obj.filters.length > 0 && obj.filters("alpha")) {
                    obj.filters("alpha").opacity = opacity * 150;
                } else {
                    obj.style.filter = "alpha(opacity=\"" + (opacity * 150) + "\")";
                }
            } catch (e) { }
        }
        var c = 0;
        this.doAlpha = function() {
            if (++c > 20) { clearInterval(ad); return 0; }
            setOpacity(shield, c);
        }
        var ad = setInterval("doAlpha()", 1);
        this.doOk = function() {
            document.body.removeChild(alertFram);
            document.body.removeChild(shield);
            document.body.onselectstart = function() { return true; }
            document.body.oncontextmenu = function() { return true; }
        }
        document.getElementById("do_OK").focus();
        document.body.onselectstart = function() { return false; }
        document.body.oncontextmenu = function() { return false; }
        
        timer=window.setInterval("dec()", 1000);//=================放最后,防止未生成控件
    }</script>
        <title></title>
    </head>
    <body>
        <form id="form1" >
        <div>
               <input type="submit" ID="Button2" valule="Button"  OnClick=" return aaa()"/>  
            <input id="Button1" type="button" value="button" onclick="aaa()" />
        </div>
        </form>
    </body>
    </html>
      

  8.   

    谢谢楼上的兄台,可问题依然存在,如果是5秒时间自然过去,不去点确定的话,没有问题发生,但是如果5秒内去点确定,依然提示document.getElementById("time_pad").innerHTML = time;document.getElementById()为空或不是对象
    另外有一点我有点怀疑,是不是浏览器的问题,我用的是win server 2003 + IE 8  beta2IE8脚本调式功能貌似很强不知道兄弟们用的是什么 IE测试的 
      

  9.   

    谢谢楼上的兄台,可问题依然存在,如果是5秒时间自然过去,不去点确定的话,没有问题发生,但是如果5秒内去点确定,依然提示document.getElementById("time_pad").innerHTML = time;document.getElementById()为空或不是对象
    另外有一点我有点怀疑,是不是浏览器的问题,我用的是win server 2003 + IE 8  beta2IE8脚本调式功能貌似很强不知道兄弟们用的是什么 IE测试的 
      

  10.   

    忘记了,这里也要清楚计时器this.doOk = function() {
          if(timer){clearInterval(timer);timer=null;}//================清除计时器
            document.body.removeChild(alertFram);
            document.body.removeChild(shield);
            document.body.onselectstart = function() { return true; }
            document.body.oncontextmenu = function() { return true; }
        }
      

  11.   

    谢谢showbo 兄!问题解决,结贴!3Q