下面是我的JSP页面中的部分代码,大概意思是因为我对用户提交的时间格式有限制,所以在submit提交时要先验证时间格式的合法性,如果不合法,则弹出对话框提示。
  但我碰到的问题是:时间格式错误时,提示对话框也弹出来了,但是点击对话框上面的“确定”后,还是会触发提交动作。而我想要的是弹出错误提示后,点击“确定”,还是停留在原来页面,让用户可以修改时间格式。//验证是否为日期  
function validator(){   
if(isDate(document.all.demo1.value.trim())==false){  
document.all.demo1.select();  
  return false;  
}   
/**   
 判断输入框中输入的日期格式是否为 yyyy-mm-dd 或yyyy-m-d  
 */   
function isDate(dateString){  
if(dateString.trim()=="")return true;  
//年月日正则表达式  
var r=dateString.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);  
if(r==null){  
  alert("请输入格式正确的日期\n\r日期格式:yyyy-mm-dd\n\r例 如:2008-08-08\n\r");  
  return false;  
  }  
  var d=new Date(r[1],r[3]-1,r[4]);   
  var num = (d.getFullYear()==r[1]&&(d.getMonth()+1)==r[3]&&d.getDate()==r[4]);  
  if(num==0){  
  alert("请输入格式正确的日期\n\r日期格式:yyyy-mm-dd\n\r例 如:2008-08-08\n\r");  
  return false;  
}  
return (num!=0);  
   
}   </script>  
</head>
   
  <body>
  <s:form action="regMember.action">
  <table align="center">
  <tr><td><s:textfield label="成员账号" name="tempUserInfo.account" /></td></tr>
  <tr><td><s:textfield label="密码" name="tempUserInfo.password" /></td></tr>
  <tr><td><s:radio name="tempUserInfo.sex" list="#{'0':'男','1':'女'}" label="性别"></s:radio></td></tr>
  <tr><td><s:textfield label="出生年月" id="demo1" name="tempUserInfo.birthday" /></td></tr>
  <tr><td>
  <tr><td><s:submit value="提交" onclick="validator()" /></td></tr>
  </table>
  </s:form>
  </body>

解决方案 »

  1.   

    2种方法。
    1.加一个隐藏的iframe,将提交的target指向这个frame,frame里弹JS提示。
    2.Ajax.
      

  2.   

    //验证是否为日期   
    function validator(){   
      if(isDate(document.all.demo1.value.trim())==false){   
         document.all.demo1.select();   
         return false;   
       }   
       return true;
    }/**   
     判断输入框中输入的日期格式是否为 yyyy-mm-dd 或yyyy-m-d   
     */   
    function isDate(dateString){   
    if(dateString.trim()=="")return true;   
    //年月日正则表达式   
    var r=dateString.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);   
    if(r==null){   
      alert("请输入格式正确的日期\n\r日期格式:yyyy-mm-dd\n\r例 如:2008-08-08\n\r");   
      return false;   
      }   
      var d=new Date(r[1],r[3]-1,r[4]);   
      var num = (d.getFullYear()==r[1]&&(d.getMonth()+1)==r[3]&&d.getDate()==r[4]);   
      if(num==0){   
      alert("请输入格式正确的日期\n\r日期格式:yyyy-mm-dd\n\r例 如:2008-08-08\n\r");   
      return false;   
    }   
    return (num!=0);   
        
    }   </script>   
    </head>
        
      <body>
      <s:form action="regMember.action" onsubmit="return validator()">
      <table align="center">
      <tr><td><s:textfield label="成员账号" name="tempUserInfo.account" /></td></tr>
      <tr><td><s:textfield label="密码" name="tempUserInfo.password" /></td></tr>
      <tr><td><s:radio name="tempUserInfo.sex" list="#{'0':'男','1':'女'}" label="性别"></s:radio></td></tr>
      <tr><td><s:textfield label="出生年月" id="demo1" name="tempUserInfo.birthday" /></td></tr>
      <tr><td>
      <tr><td><s:submit value="提交" /></td></tr>
      </table>
      </s:form>
      </body>
      

  3.   

    不是吧,哥哥,没有简单的办法了?
    这么麻烦啊,Ajax我还没学过
      

  4.   

    <s:form action="regMember.action" onsubmit="return validator()">这个也可以啊,提交前验证,但这个只限于前台验证。如果用Ajax可以写在这个validator里做请求,返回验证结果。
      

  5.   

    你的判断有问题,js写的if有问题,稍加修改就OK了;
    我就说下大的范围:
    if(这里写判断时间的格式不成功的话){
       ALERT("DDDD");
       RETURN FALSE;
    }
    else{ 
       调用你的后台方法;
    }
      

  6.   

    哦,Ajax准备要学习的,不过暂时只能用前台验证的办法了。还有一点问题,弱弱的问下,我有好几个字段要验证,script里也有好几个函数,能不能同时用这个方法?
    比如<s:form action="regMember.action" onsubmit="return validator()" onsubmit="return abc()" onsubmit="return xxx()">???
      

  7.   

    把验证写到一个函数里,只要有一个验证没通过就返回false
      

  8.   

    告诉一个简单的方法,就是将验证放在焦点移出时间text框时触发验证事件