我现在用一个页上用js设定了一个10分钟的倒计时器,页面上没有提交按钮,设定了倒计时为0的时候自动提交,但是现在经常出现两种情况:
   1、计时到0就卡住没反应,停在当前页,也不提交,用户还可以在文本框里面填数据,查过后台数据库却发现实际已经提交了。
   2、计时还未到0时就会自动提交,据反应有2分的也有7分多的。
   此页里另外还有一个禁回车提交的js,所有相关代码如下:
   <%
    response.setCharacterEncoding("gb2312");
//清除缓存,防止页面后退
response.setHeader("Pragma","no-cache"); 
    response.setHeader("Cache-Control","no-store"); 
    response.setDateHeader("Expires", 0);  String user = "";
String mode = request.getParameter("mode");

if(session.getAttribute("euser") == null)
{
    out.println("<script language = javascript>alert('请先登录系统!');window.location.href='enter.jsp';</script>");
}
else
{
    user = (String)session.getAttribute("euser");
byte b[] = user.getBytes("ISO-8859-1");
user = new String(b);
}
%>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>考试页面</title>
<style type="text/css">
<!--
.STYLE1 { font-size: 36px;
font-family: "华文行楷", "隶书", "华文彩云", "黑体";
}
.STYLE3 {font-size: 12px}
.STYLE4 {font-family: "宋体"}
.STYLE5 {font-size: 12; }
.STYLE6 {
color: #666666;
font-weight: bold;
}
.STYLE8 {font-size: 12px; color: #0000FF; }
.STYLE9 {color: #000000}
-->
</style>
<!--倒计时器-->
<script language="javascript" type="text/javascript">
var h,m,s,hstr,mstr,sstr,timestr;
var etime = 10 * 60;   //倒计时的总秒数为10分钟。
function timer()
{
    //h = Math.floor(etime / 3600);    //时
    m = Math.floor(etime / 60) % 60; //分
    s = Math.floor(etime % 60);      //秒
    
    //h < 0 ? h = 0 : h = h;
    m < 0 ? m = 0 : m = m;
    s < 0 ? s = 0 : s = s;
    
    //h.toString().length < 2 ? hstr = "0" + h.toString() : hstr = h; //1显示01
    m.toString().length < 2 ? mstr = "0" + m.toString() : mstr = m; //1显示01
    s.toString().length < 2 ? sstr = "0" + s.toString() : sstr = s; //1显示01
    
    //timestr = hstr + ":" + mstr + ":" + sstr;
timestr = mstr + ":" + sstr;
    
    txt.value = timestr;
    
    etime = etime - 1;
}
</script>
<style type="text/css">
    .float
    {
        position: fixed;
        right:220px;
        top:30px;
        width:50px;
        height:20px;
        background-color: Silver;
    }
    .long
    {
        height: 30px;
    }
</style>
<script language="javascript">
   //防止回车误提交
   //document.getElementsByName("myForm").onsubmit = function(e){
   function loadf(){
    document.form1.onkeydown = function(e){
       var evt = e || window.event;
   var ecd = evt.which || evt.keyCode;
   //return ecd == 13 ?false : true;
   if(ecd == 13){
       evt.keyCode = 0;
       return false;}
 }
   }
</script>
</head><body onload="window.setInterval('timer()',1000);loadf();">
    <div id="floatDiv" class="float">
        <input type="button" id="txt" name="txt" value="" width="15" height="10" src="../img/bg_button.jpg"/>
    </div>
    <div class="long"></div>

<script type="text/javascript">
    var userAgent = navigator.userAgent.toLowerCase();
    var browser = {
        msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ),
        version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1]
    };    var div = document.getElementById('floatDiv');
    if (browser.msie && browser.version < 8) {
        div.style.position = 'absolute';
        var offsetTop = document.getElementById('floatDiv').offsetTop;
        window.onscroll = function() {
            var top = document.documentElement.scrollTop + offsetTop;
            document.getElementById('floatDiv').style.top = top;
        };
    }
</script><!--
<script language="javascript">
   function checkSubmit()
   {
       if(confirm('确认要提交吗?'))
   {
//document.form1.action = "dealTest.jsp";
form1.submit();
   }
   return false;
   }
</script> 
-->
<form id="form1" name="form1" method="post" action="dealTest.jsp">
<script language="javascript">
   setTimeout("form1.submit();",600000);
</script>
   
    这两种情况平均每10个人就出现1-3个,麻烦大家帮忙看下啊,很急的问题,多谢了啊!
   

解决方案 »

  1.   

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
     <% 
        response.setCharacterEncoding("gb2312"); 
    //清除缓存,防止页面后退 
    response.setHeader("Pragma","no-cache"); 
        response.setHeader("Cache-Control","no-store"); 
        response.setDateHeader("Expires", 0); String user = ""; 
    String mode = request.getParameter("mode"); if(session.getAttribute("euser") == null) 

        out.println(" <script language = javascript>alert('请先登录系统!');window.location.href='enter.jsp'; </script>"); 

    else 

        user = (String)session.getAttribute("euser"); 
    byte b[] = user.getBytes("ISO-8859-1"); 
    user = new String(b); 

    %> 
    <html xmlns="http://www.w3.org/1999/xhtml" > 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 
    <title>考试页面 </title> 
    <style type="text/css"> 
    <!-- 
    .STYLE1 { font-size: 36px; 
    font-family: "华文行楷", "隶书", "华文彩云", "黑体"; 

    .STYLE3 {font-size: 12px} 
    .STYLE4 {font-family: "宋体"} 
    .STYLE5 {font-size: 12; } 
    .STYLE6 { 
    color: #666666; 
    font-weight: bold; 

    .STYLE8 {font-size: 12px; color: #0000FF; } 
    .STYLE9 {color: #000000} 
    --> 
    </style> 
    <!--倒计时器--> 
    <script language="javascript" type="text/javascript"> 
    var h,m,s,hstr,mstr,sstr,timestr; 
    var etime = 10;  //倒计时的总秒数为10分钟。 
    function timer() { 
        //h = Math.floor(etime / 3600);    //时 
        //m = Math.floor(etime / 60) % 60; //分 
        s = Math.floor(etime % 60);      //秒 
        
        //h < 0 ? h = 0 : h = h; 
        //m < 0 ? m = 0 : m = m; 
        s < 0 ? s = 0 : s = s; 
        
        //h.toString().length < 2 ? hstr = "0" + h.toString() : hstr = h; //1显示01 
       //m.toString().length < 2 ? mstr = "0" + m.toString() : mstr = m; //1显示01 
        s.toString().length < 2 ? sstr = "0" + s.toString() : sstr = s; //1显示01 
        
        //timestr = hstr + ":" + mstr + ":" + sstr; 
    //timestr = mstr + ":" + sstr; 
    timestr =  sstr; 

        txt.value = timestr; 
        
        etime = etime - 1; 
        if (etime ==0) {
         checkSubmit();
        }

    </script> 
    <style type="text/css"> 
      .float 
      { 
          position: fixed; 
          right:220px; 
          top:30px; 
          width:50px; 
          height:20px; 
          background-color: Silver; 
      } 
      .long 
      { 
          height: 30px; 
      } 
    </style> 
    <script language="javascript"> 
      //防止回车误提交 
      //document.getElementsByName("myForm").onsubmit = function(e){ 
      function loadf(){ 
        document.form1.onkeydown = function(e){ 
          var evt = e || window.event; 
          var ecd = evt.which || evt.keyCode; 
          //return ecd == 13 ?false : true; 
          if(ecd == 13){ 
           evt.keyCode = 0; 
           return false;} 
      } 
      } 
    </script> 
    </head> 
    <body onload="window.setInterval('timer()',1000);loadf();"> 
    <div id="floatDiv" class="float"> 
        <input type="button" id="txt" name="txt" value="" width="15" height="10" src="../img/bg_button.jpg"/> 
    </div> 
    <div class="long"></div> 
    <script type="text/javascript"> 
        var userAgent = navigator.userAgent.toLowerCase(); 
        var browser = { 
            msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ), 
            version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1] 
        };     var div = document.getElementById('floatDiv'); 
        if (browser.msie && browser.version < 8) { 
            div.style.position = 'absolute'; 
            var offsetTop = document.getElementById('floatDiv').offsetTop; 
            window.onscroll = function() { 
                var top = document.documentElement.scrollTop + offsetTop; 
                document.getElementById('floatDiv').style.top = top; 
            }; 
        } 
    </script> 
    <script language="javascript"> 
      function checkSubmit() { 
          if(confirm('确认要提交吗?')) { 
    form1.submit(); 
         } 
       return false; 
      } 
    </script> 
    <form id="form1" name="form1" method="post" action="dealTest.jsp"> 
      

  2.   

    你可以这样:
    function event_timer(rt) {   rt传一个时间 
       if (rt == 0){ 
          提交!
       }else{  
           setTimeout("event_timer('"+rt+"')",1000);       
        }
    }