con.Open();
        SqlCommand Cmd = new SqlCommand("select length=DATALENGTH(small_pic),product_ID from tab_product_info ", con);
        SqlDataReader Sdr = Cmd.ExecuteReader();
        while (Sdr.Read())
        {
            if (Sdr["length"].ToString() == "" || Sdr["length"] == null)
            {
                Page.RegisterStartupScript("page" + Sdr["product_ID"].ToString(), "<script>document.getElementById('img" + Sdr["product_ID"].ToString().Trim() + "').src='images/showimg.gif'</script>");
            }
                   }
        Sdr.Close();
        con.Close();
为什么这样注册脚本后允许可以正常,但老提示document.getElementById(..)为空或不是对象....

解决方案 »

  1.   

    document.getElementById('img" + Sdr["product_ID"].ToString().Trim() + "').src='images/showimg.gif' 
    你的这个名字是变化的,不存在你要的对象,错误提示已经很清楚了.
      

  2.   

    你打印出getElementById()中拼的字符串,看是否正确?
      

  3.   

    浏览后看看源文件,看看你生成的是不是正常的html元素
      

  4.   

    页面代码是这样的
     <asp:DataList ID="DataList1" runat="server" RepeatColumns="4" Width="679px">
                           <ItemTemplate>      
                            <table style="width: 150px; height:140px" border=0>
                                <tr align="left">
                                    <td style="width: 100px;height:100px" align="center"><a href="show.aspx?product_ID=<%# DataBinder.Eval(Container.DataItem,"product_ID") %>" target="_blank"><img border="0"id='img<%# DataBinder.Eval(Container.DataItem,"product_ID") %>' width="100px" height="100px"  src='chuli.aspx?flag=samll&imgid=<%# DataBinder.Eval(Container.DataItem,"product_ID") %>'/></a>
                                    </td>
                                </tr>              
                                <tr>
                                    <td style="width: 150px;height:40px" align="left"> <a href="show.aspx?product_ID=<%# DataBinder.Eval(Container.DataItem,"product_ID") %> " target="_blank"><%# DataBinder.Eval(Container.DataItem, "product_name")%></a>
                                    </td>
                                </tr>                           
                            </table>
                           </ItemTemplate>
                          </asp:DataList>
    我是想动态改变IMG的图片地址
      

  5.   

    先看一下源文件,控件的名字是否是 img" + Sdr["product_ID"]
      

  6.   

    <script>
    改为
    <acript defer="defer">
    试试
      

  7.   

    放在DataList里面的Template的控件ID可能不是原来的那样了,看看生成的Html
      

  8.   

    笔误,是<script defer="defer">
    楼主,你的问题可能是因为这段js执行时,相关的对象还没有解析造成的,加上defer="defer",意思就是这段js等页面载入完成了再执行,你试试看
      

  9.   

    噢,我想起来了,用ID好像不行的,把img的Name也加上,和ID一样
      

  10.   

    可能是在执Page.RegisterStartupScript("page" + Sdr["product_ID"].ToString(), " <script>document.getElementById('img" + Sdr["product_ID"].ToString().Trim() + "').src='images/showimg.gif' </script>"); 的时候
    'img" + Sdr["product_ID"].ToString().Trim() + "' 还没有创建出来吧。
      

  11.   

    <img border="0"id='img <%# 
    img后面多了个空格
      

  12.   

    Page.RegisterStartupScript是加在FORM的末尾,
    这个时候控件应该是已经加载完成了可能是编译后的ID名不是'img" + Sdr["product_ID"].ToString().Trim() + "'格式吧
    比如有模板、用户控件内的情况下,服务端的ID在编译成客户端后是会在前面加入模板/用户控件的前缀编号的
      

  13.   

    参看客户端生成的html源文件
    看是否id错误,不匹配