各位帮忙看一下 下面的jsp页面个 为什么javaScript验证不起作用呢<%@ page language="java" contentType="text/html; charset=utf8" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <meta http-equiv="Content-Type" content="text/html">
  <meta http-equiv="Content-Type" content="zh-cn" >
    <title>登录</title>
    <script type="text/javascript">
     function cheackUser(){
     var userName=document.getElementById("textUserName");
     if(userName==""){
     document.getElementById("userError").innerHtml("用户名不能为空!");
     userName.innerHtml("");
     }
     }
    
     function cheackPasswd(){
     var passwd=document.getElementById("textPasswd");
     if(passwd==""){
     document.getElementById("pwdError").innerHtml("密码不能为空!");
     passwd.innerHtml("");
     }
     }
    
     function cheackValidNum(){
     var validNum=document.getElementById("validNum");
     var sessionValidNum=<%=session.getAttribute("validNum")%>;
     if(validNum==sessionValidNum){
     document.getElementById("validNumError").innerHtml("验证码不正确!");
     validNum.innerHtml("");
     <%=session.removeAttribute("validNum")%>
     return false;
     }
     else{
     return true;
     }
     }
    </script>
  </head>
  
  <body>
<form method="post"  name="loginForm" action="login" 
onsubmit="javaScript:return cheackValidNum(this);">
<table align="center" bgColor="#cccccc" border="0" 
cellSpacing="0" width="550">
<tr>
<td align="right" height="47" vAlign="bottom" width="94">用户名:</td>
<td height="47" vAlign="bottom" width="172"> 
<input type="text" name="textUserName" onblur="cheackUser()"/>
</td>
<a><span class="fade" name="userError"></span></a>
</tr>
<tr>
<td align="right" width="94">密码:</td>
<td width="172">
<input type="password" name="textPasswd" onblur="cheackPasswd()"/>
</td>
<a><span class="fade" name="pwdError"></span></a>
</tr>
<tr>
<td align="right" width="94">
验证码:<img id="validPic" src="image" />
<a href="javascript:;" onclick="document.getElementById('validPic').src = 'image?'+(new Date()).getTime()";
   >换一张</a>
</td>
<td  width="172">
<input type="text" id= "validNum" name="validNum" value=""/>
</td>
<a><span class="fade" name="validNumError"></span></a>

</tr>
<tr>
<td align="right" height="44" width="94"></td>
<td height="44" width="172" >
<input type="submit" name="Submit" value="提交">
<input type="button" name="Rest" value="重置">
</td>
</tr>
</table>
</form> 
</body>
</html>

解决方案 »

  1.   


     function cheackUser(){
                var userName=document.getElementById("textUserName").value;//要判断这个value为空吗,而不是这个element对象
                if(userName==""){
                    document.getElementById("userError").innerHtml("用户名不能为空!");
                    //userName.innerHtml("");
                      userName.value="";//改成这个
                }
            }
    cheackPasswd同理function cheackValidNum(){
                var validNum=document.getElementById("validNum").value;//同理
                var sessionValidNum=<%=session.getAttribute("validNum")%>;
                if(validNum==sessionValidNum){//验证码相同怎么提示不正确???
                    document.getElementById("validNumError").innerHtml("验证码不正确!");
                    validNum.value="";
                    <%=session.removeAttribute("validNum")%>
                    return false;
                }
                else{
                    return true;
                }
            }
      

  2.   

    首先,上面这行代码是不对的,应该写成               <% session.removeAttribute("validNum");%>然后,
    你想在JS中去执行JSP Scriptlet代码是做不到的。在JS执行的时候,JSP Scriptlet已经执行过了,变成死的(不变的)字符串了。
      

  3.   

    看起来没什么问题呀? 
    onblur 失去焦点的时候 进JS方法吗?
      

  4.   


    这样应该是可以的吧,楼主就是想把验证码赋值给sessionValidNum,并在session中删除,这些事情在js生成的时候完成的啊,并不是在js执行的时候完成的,换句话,在容器讲jsp转换成servlet的时候,jsp脚本的工作就完成了
      

  5.   

    果然 他只写了 name="textUserName"
      

  6.   

    用火狐浏览器的firebug调试js代码
      

  7.   

    var validNum=document.getElementById("validNum");
    =>
    var validNum=document.getElementById("validNum").value;
    or
    var validNum=document.getElementById("validNum").text;
      

  8.   


    var userName=document.getElementById("textUserName");
    var validNum=document.getElementById("validNum");把这两处改为下面的代码: var userName=document.getElementById("textUserName").value;
    var validNum=document.getElementById("validNum").value;
      

  9.   

    用alert 看看方法进去了吗 到哪里出错了  
      

  10.   

     <script type="text/javascript">
            function cheackUser(){
                var userName=document.getElementById("textUserName").value;
                if(userName==""){
                    document.getElementById("userError").innerHtml("用户名不能为空!");
                    userName.innerHtml("");
                }
            }
            
            function cheackPasswd(){
                var passwd=document.getElementById("textPasswd").value;
                if(passwd==""){
                    document.getElementById("pwdError").innerHtml("密码不能为空!");
                    passwd.innerHtml("");
                }
            }
            
            function cheackValidNum(){
                var validNum=document.getElementById("validNum").value;
                var sessionValidNum=<%=session.getAttribute("validNum")%>;
                if(validNum==sessionValidNum){
                    document.getElementById("validNumError").innerHtml("验证码不正确!");
                    validNum.innerHtml("");
                    <%=session.removeAttribute("validNum");%>
                    return false;
                }
                else{
                    return true;
                }
            }
        </script>因为你比较的是对象而不是对象里的值.所以验证不起效果
    第三个方法 应该只能使用一次, 第二次在不刷新session的情况下 已经取不到新的验证码了
    跟标签不写ID没有关系   getElementById方法是顺序检测的 先ID 没有就用NAME
      

  11.   

    弄错了个事 <%=session.removeAttribute("validNum");%>多加了个";"分号
    这个应该去掉  sorry