无法获取文档.GetElementById工作正常

Cannot get document.GetElementById working right

本文关键字:工作 GetElementById 文档 获取      更新时间:2023-09-26

我正试图从asp服务器按钮的onClick事件中调用一个javascript函数。我在更新面板中有这个按钮和一个标签。

在aspx:中

    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
       <ContentTemplate>
         <asp:Button ID="Button1" runat="server" 
            style="z-index: 1; left: 49px; top: 119px; position: absolute; height: 26px;" Text="Button" 
            onclick="Button1_Click"/>
         <asp:Label ID="Label1" runat="server" Text="l1" 
            style="position:absolute; top: 123px; left: 127px;"></asp:Label>
       </ContentTemplate>
    </asp:UpdatePanel>

代码背后:

protected void Button1_Click(object sender, EventArgs e)
{
   ScriptManager.RegisterClientScriptBlock(this, typeof(Button), "me", "me()", true);
}

aspx:中的Javascript

<script type="text/javascript">
function me()
{
   document.getElementById('<%= Label1.ClientID %>').value="clicked";
}
</script>

我所要做的就是点击按钮,标签的值应该改为"点击",这并没有发生,在firebug中也没有错误。我错在哪里了?

p.S:我这样做是为了学习从代码背后调用javascript函数。因此,对代码的任何优化都是受欢迎的。(事实上,我稍后在JS函数中有很多代码要实现,所以请提供适当的建议)

据我所知,Label控件被呈现为<div><span>(记不清了),而不是文本输入字段。所以你应该设置它的innerHTML属性,而不是value:

document.getElementById('<%= Label1.ClientID %>').innerHTML = 'clicked';

或者简单地在服务器端进行,而不是注册客户端回调:

protected void Button1_Click(object sender, EventArgs e)
{
   Label1.Text = "clicked";
}

更新:

正如评论部分所要求的,以下是如何从服务器向客户端回调传递参数:

protected void Button1_Click(object sender, EventArgs e)
{
    string param1 = ...
    double param2 = ...
    int param3 = ...
    var serializer = new JavaScriptSerializer();
    ScriptManager.RegisterClientScriptBlock(
        this, 
        typeof(Button), 
        "me", 
        string.Format("me({0})", serializer.Serialize(new { param1 = param1, param2 = param2, param3 = param3 })), 
        true
    );
}

以及您的回拨:

function me(values) {
    // you could use values.param1, values.param2, values.param3, ... here
}