[英]Why is the label not changing color using RegisterClientScriptBlock?
我有一個 aspx 頁面定義如下:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script type="text/javascript" language='javascript'>
function changecolor() {
var lbl = document.getElementById('lblDisplayDate');
lbl.style.color = 'red';
};
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="lblDisplayDate" runat="server"
Text="Label"></asp:Label><br />
<asp:Button ID="btnPostBack2" runat="server"
Text="Register Client Block Script"
onclick="btnPostBack2_Click" />
</div>
</form>
這是 btnPostBack2 點擊事件:
protected void btnPostBack2_Click(object sender, EventArgs e)
{
if (!ClientScript.IsClientScriptBlockRegistered("JSScriptBlock"))
{
ClientScript.RegisterClientScriptBlock(this.GetType(),
"JSScriptBlock",
"changecolor();",
true);
}
}
即使我將腳本放在 function 中以更改顏色,它仍然沒有這樣做,如果 function 已經包含在腳本標簽中,為什么我需要將腳本標簽添加為 true?
lblDisplayDate 在頁面加載中,它在每次頁面重新加載時設置為當前時間。
看一下這個。 我已經修改了您的代碼,並且現在可以正常工作而無需回發。
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled Page</title>
<script type="text/javascript" language='javascript'>
function changecolor() {
var lbl = document.getElementById('lblDisplayDate');
lbl.style.color = 'red';
};
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="lblDisplayDate" runat="server"
Text="Label"></asp:Label><br />
<asp:Button ID="btnPostBack2" runat="server"
Text="Register Client Block Script"
OnClientClick="changecolor(); return false" />
</div>
</form>
</body>
</html>
希望這可以幫助
更改此行:
var lbl = document.getElementById('lblDisplayDate');
至:
var lbl = document.getElementById('<%= lblDisplayDate.ClientID %>');
此外,這可能並沒有做你想做的事情。 嘗試添加:
OnClientClick="changecolor()"
到您的<asp:Button />
標簽。
編輯在這一點上,我對你到底想要完成什么感到很困惑......
如果您只想更改 label 的顏色而不回發,請使用 onclick 處理程序將<asp:Button />
更改為普通的<input type="button" />
並調用您的腳本,如下所示:
<input type="button" ... onclick="changeColor();" />
如果您想在回發時更改 label 的顏色,則只需在代碼隱藏中更改標簽的背景,如下所示:
protected void btnPostBack2_Click(object sender, EventArgs e)
{
/* ... other stuff goes here ... */
lblDisplayDate.BackColor = Color.Red;
/* ... other stuff goes here ... */
}
就像 Sean 已經說過的那樣:在這種情況下最好使用 OnClientClick。 OnClientClick 將防止回發發生 - 它是使用 javascript 動態完成的。 您需要做的就是優先選擇 javascript function。
我不明白你想在顏色變化上做一個“RegisterStartupScript 和 RegisterClientScriptBlock”。 當你想從后面的代碼中添加 javascript 時,應該使用這些,但是看到你已經在 aspx 頁面中寫了它,它的使用是沒有意義的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.