<asp:TextBox ID="tbcityid" runat="server" Width="59px"></asp:TextBox>
<input type="button" class="form" name="Submit" value="查询" onclick="ShowModelWindow();" />
   <script type="text/javascript" defer="defer">        function ShowModelWindow() 
        {
            var iTop = (window.screen.availHeight - 510) / 2; //获得窗口的垂直位置;
            var iLeft = (window.screen.availWidth - 650) / 2; //获得窗口的水平位置;            debugger;
            var cityid = document.getElementById('ctl00_workspace_tbcityid').value;
           
                    }我用  var cityid = document.getElementById('tbcityid').value;  得不到值然后用   var cityid = document.getElementById('ctl00_workspace_tbcityid').value; 就可以了
为什么会多了ctl00_workspace_这部分??
我是在下载的源程序里修改的

解决方案 »

  1.   

    document.getElementById('<%=tbcityid.ClientID%>')
      

  2.   

    你用的是服务端控件,是会变ID的。document.getElementById('<%=TextBox1.ClientID %>
      

  3.   

    因为亲把textbox放在母版页了!var aa = $("#<%=TextBox1.ClientID %>");
    alert(aa);
    试试
      

  4.   

    呵呵 从winform转过来的,标准的菜鸟什么都不说了,心里非常感谢各位
      

  5.   

    当一个控件在模板页中时,这个控件的Client ID将会被附着与他的Content placeholder ID.所以,如果一个元素的ID为txtTest”,那么这个新的Client ID就会像"ctl00_ContentPlaceHolder1_ txtTest”.所以,当你试着用document.getElementById(‘txtTest’), 你将无法使用javascript来访问txtTest,你需要通过调用document.getElementById(‘ctl00_ContentPlaceHolder1_ txtTest’)来访问它。为了避免对这个较长的Client ID进行硬编码,我们可以通过使用document.getElementById('<%=txtTest.ClientID%>')访 问控件,这样就能够访问txtTest.
      

  6.   

    你们还在不现在又遇到问题了,当开启新页面后,我要把值传回去。我用window.opener.document.getElementById('<%=tbcityid.ClientID%>').value = a; 就不行还是要用回这种window.opener.document.getElementById('ctl00_workspace_tbcityid').value = a; 才行
      

  7.   

    现在又遇到问题了,当开启新页面后,我要把值传回去。我用window.opener.document.getElementById('<%=tbdistrictid.ClientID%>').value = a; 就不行还是要用回这种window.opener.document.getElementById('ctl00_workspace_tbcityid').value = a; 才行
      

  8.   

    模板页 可所有显示数据的控件为了避免在发送到客户端的html中出现重复的ID,都会在控件前加入默认生成的一个前缀(后缀)。要么自己用js判断该加什么前缀(后缀),要么js遍历节点。
    在不想依赖C#代码的前提下,建议用Jquery的选择器,这样的代码比较干净,并且易读。