做个注册的程序,生成验证码,在textbox1(txtIamgeValidate)中输入生成的验证码,在textbox2(txtValidate) 中记录生成的验证码,textbox2.visible=false,在前段写个一个javascript函数:
function  Validate()
    {
       var text1=document.getElementById("txtIamgeValidate").value;
       var text2=document.getElementById("txtValidate").value;
       if(text1!=text2)
       {
        alert("您输入的验证码不正确");
       }
    }
然后再程序中的page_load中,添加一行代码:this.txtIamgeValidate.Attributes.Add("onblur", "Validate()");
在焦点离开时执行Validate(),以判断输入的验证码是否正确,但是在程序运行过程中,提示出错:Microsoft JScript 运行时错误: 缺少对象。一看后面控件的ID全都给改了。怎么回事,有知道的吗,谢谢!!!

解决方案 »

  1.   

     var text1=document.getElementById("<%=this.txtImageValidate.ClientID%>").value; 
          var text2=document.getElementById("<%=this.txtValidate.ClientID%>").value; 
      

  2.   

    用了您的方法后,运行的时候提示出错,
    况且,内容又改了,改成这样了:
     var text1=document.getElementById(" ctl00_ContentPlaceHolder1_txtIamgeValidate").value; 
           var text2=document.getElementById(" ctl00_ContentPlaceHolder1_txtValidate").value;
      

  3.   

    又有问题了,把txtValidate.visible修改成false,就提示Microsoft JScript 运行时错误: 缺少对象,错误指在 var text2=document.getElementById(" <%=this.txtValidate.ClientID%>").value; 
    这一行代码上,况且代码又修改了:
      var text1=document.getElementById("ctl00_ContentPlaceHolder1_txtIamgeValidate").value; 
           var text2=document.getElementById("ctl00_ContentPlaceHolder1_txtValidate").value; 
      

  4.   


    缺少对像是因为你的textbox2的visible设置成了false过后,根本就不会输出到客户端,
    所以你在客户端用JS去操作它,当然是说缺少对象啊!你滴明白???
      

  5.   

    看看页面运行了以后的源文件,你就发现了ID并不是你原先的ID,这个很正常的,把TextBox放到GridView中或者在运用了模板页的页面中使用的控件都不是你原先的ID,你可以用TextBox1.ClientID来得到这个TextBox1在客户端的真实的ID.
      

  6.   

    你把你的textbox2 写这、成这样试试
    <asp:TextBox ID="textbox2" runat="server" style="display:none"></asp:TextBox>
      

  7.   

    我棏就是放在模板中的,现在的问题是怎么解决,textbox的visible为false时,还能在js中引用他的text呢!!!
      

  8.   

    OK。搞定。多谢楼上的几位高手的回答!!!还有一个问题,我想问一下,如果输入的验证码不正确,怎么将焦点定位在txtIamgeValidate上面呢,谢谢!!!!
      

  9.   


    textbox的visible为false时你不可能在客户端引用或者找到它!你把textbox2的样式设置为不可见,就能在客户端找到了,textbox的visible为false,表示不在客户端显示,不在客户端显示就不会输出到客户端
    你把它的style设置成"display:none"后,意思就是在客户端隐藏为不可见,但还是输出到了客户端!
    你滴明白???
      

  10.   

    谢谢楼上的解释,我滴明白!!!还有一个问题,我想问一下,如果输入的验证码不正确,怎么将焦点重新定位在输入验证码的txtIamgeValidate上面呢,谢谢!!!!
      

  11.   


    这个有点忘了,你在JS里这样写看对不 " text1.Focus()"
      

  12.   

    楼上的,那样写不队啊 , 您再仔细想想!!!我是这样写的:document.getElementById(<%=this.txtIamgeValidate.ClientID%>).focus;提示出错哦!
    Microsoft JScript 运行时错误: 'ctl00_ContentPlaceHolder1_txtIamgeValidate' 未定义
      

  13.   

    你这样写
    var obj = document.getElementById( <%=this.txtIamgeValidate.ClientID%>);
    alert(obj);
    看弹出的是什么东东;
      

  14.   

    <script language=javascript type="text/javascript" >
       function  Validate()
        {
           var text1=document.getElementById("<%=this.txtIamgeValidate.ClientID%>").value; 
           var text2=document.getElementById("<%=this.txtValidate.ClientID%>").value; 
           if(text1!=text2)
           {
            alert("您输入的验证码不正确");
            document.getElementById( <%=this.txtIamgeValidate.ClientID%>).focus();
           }
        }
     </script>这是js代码,上面最后一样是刚才按照您的写上去的,执行就出错阿
    在后面的page_load中有一行代码:
    this.txtIamgeValidate.Attributes.Add("onblur", "Validate()"); 
      

  15.   

    弹出个小窗体,中间显示[object]
      

  16.   

    显示object就对了,为什么不能把焦点移到这个对象上呢?是因为这个对象被隐藏了?明白了没?
    不知道你为什么把焦点移向验证码上,你那个隐藏的,你移上去干嘛?????我先吃饭了,我是饭桶
    哈哈!!一会帮你看看
      

  17.   

    您误会了, 我是想如果输入验证码不正确,按Tab键后,提示不正确,点确认之后,焦点再重新回到要输入验证码的文本框中,而不是那个隐藏的文本框中
      

  18.   

    谢谢楼上的,搞定了,就是在后面添上一句document.getElementById( <%=this.txtIamgeValidate.ClientID%>).focus(); 
    同17楼的一样,在17楼时忘了加引号了!!!