2012-09-12 60 views
0

我想從asp服務器按鈕的onClick事件調用JavaScript函數。我在更新面板中有這個按鈕和一個標籤。無法獲得document.GetElementById工作權利

在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); 
} 

的Javascript在ASPX:

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

所有我試圖做的是點擊鏈接標籤的值應該是更改爲「點擊」,這在螢火蟲中並沒有發生,也沒有錯誤。我在哪裏錯了()?

P.S:我這樣做是爲了學習從後面的代碼調用JavaScript函數。所以對代碼的任何優化也是值得歡迎的。 (我其實有很多代碼在JS功能後實現,所以適當的建議請稍後)

回答

5

據我記得,輸入字段。所以,你應該設置它innerHTML財產不是value

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

或者乾脆做在服務器端,而不是註冊客戶方的回調:

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

UPDATE:

由於請在評論部分請求如何將參數傳遞給服務器端的客戶端回調:

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 
} 
+0

那偉大工程。我需要等待8分鐘才能接受答案。其實我的要求是這樣的:我有更新面板中的按鈕和谷歌地圖。我在代碼後面執行一些操作,在按鈕單擊並將值傳遞給.aspx中的JavaScript函數。這個javascript函數然後根據我的需要在地圖上顯示值。我只是把這個轉化爲這個例子。我無法在我的地圖案中這樣做。任何解決方案? – Cdeez

+0

@Cdeez,是的,您可以輕鬆地將參數傳遞給服務器的回調。我已經更新了我的回答來說明這一點。你也可以傳遞整個複雜的對象圖。 –