簡體   English   中英

為什么 label 不使用 RegisterClientScriptBlock 改變顏色?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM