我试图从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>
我想要做的就是点击按钮点击标签的值应该更改为'clicked',这不会发生,并且在firebug中也没有错误。我在哪里错了()?
P.S:我这样做是为了学习从后面的代码调用javascript函数。因此,对代码的任何优化也是受欢迎的。 (我实际上有很多代码要在JS函数中实现,所以请提供相应的建议)
答案 0 :(得分:5)
据我记得,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
}