我的是vs2008 安装了sp1
我新建了一个web页面在head里面添加了javascript代码:    <script type="text/javascript" language="javascript">
        function searchDiv() {
            var obj = $get("MessageBlock");
            alert(obj);
        }
    </script>然后form里面有这样一些代码:    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <div id="MessageBlock"></div>
    <div>
        <input id="Button1" type="button" value="button" onclick="searchDiv()"/>
        <asp:Button ID="Button2" runat="server" Text="Button" onclick="Button2_Click" />
    </div>在cs文件中有对Button2点击事件的定义:    protected void Button2_Click(object sender, EventArgs e)
    {
        ClientScriptManager cs = this.ClientScript;
        cs.RegisterClientScriptBlock(this.GetType(), "search", "searchDiv()", true);
    }
现在我点击input 按钮没问题。弹出对话框,对象是一个object 但是我使用<asp:Button>的时候出现错误:Microsoft JScript 运行时错误: 缺少对象。就是说var obj = $get("MessageBlock");这一句没有获取到对象。我什么地方有问题?

解决方案 »

  1.   


    ClientScript.RegisterStartupScript(GetType(), "search", "searchDiv()", true);
      

  2.   


        protected void Button2_Click(object sender, EventArgs e)
        {
            ClientScript.RegisterStartupScript(GetType(), "search", "searchDiv()", true);
        }
    RegisterClientScriptBlock 会将js 加载 在<form> 的后面 ,这个时候 dom还没有构建id 为 MessageBlock
    的div 所以找不到对象 ,就会报缺少对象的错误。
    RegisterStartupScript 则是加载 在</form>的前面,这个时候 dom基本已经构建结束,所以不会报错这就是这两个函数的区别
      

  3.   

    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "search", "searchDiv();", true);或者
    Button1增加OnClientClick事件:OnClientClick=" searchDiv();return false ;"
    后台代码删掉就行了。