2011-04-18 41 views
0

如果我有Web用戶控制(ASP.NET),如何將多個對象從標記傳遞給javascript函數?見下圖控制調用ShowList下...將多個控件傳遞給WebUserControl中的Javascript函數

<script type="text/javascript"> 
function ShowList(txt, lst) { 
    var t = document.getElementById(t.id); 
    var l = document.getElementById(l.id); 
    l.style.display = 'block'; 
} 
</script> 

<asp:Panel ID="Wrapper" runat="server" Width="200px"> 
<asp:TextBox ID="TextBox1" runat="server" Width="150px"></asp:TextBox> 
<asp:Image ID="Image1" runat="server" CssClass="image" ImageUrl="~/Images/cb-button-b3.png" 
    onclick='<%="ShowList("TextBox1,ListBox1)"%>'> 
</asp:Image> 
<asp:ListBox ID="ListBox1" runat="server" CssClass="listbox"> 
    <asp:ListItem>a</asp:ListItem> 
    <asp:ListItem>b</asp:ListItem> 
    <asp:ListItem>c</asp:ListItem> 
</asp:ListBox> 
</asp:Panel> 

回答

0

爲什麼你有這個代碼段的<%%>

onclick='<%="ShowList("TextBox1,ListBox1)"%>'

即告訴ASP.NET處理在服務器端的那部分,它獲取到客戶端之前。但是你正試圖調用一個應該在客戶端的Web瀏覽器中運行的JavaScript函數。此外,你的雙引號是在錯誤的地方。

嘗試改變剪斷這個代替上面:

onclick='ShowList(TextBox1,ListBox1)'

整條生產線將是這樣:

<asp:Image ID="Image1" runat="server" CssClass="image" 
    ImageUrl="~/Images/cb-button-b3.png" 
    onclick='ShowList(TextBox1,ListBox1)'></asp:Image> 

此外,還要確保在由ASP生成的HTML控件的ID。 NET匹配您在服務器上分配的ID。如果你使用母版頁面,他們不會。在這種情況下,您需要通過從Web瀏覽器執行查看源代碼並搜索名稱來檢查它們分配的名稱。控件的最終ID根據其NamingContainer分配。細節有點超出了你的問題的範圍,但最重要的是確保你在Javascript中使用的ID(在這種情況下,TextBox1ListBox1)與ASP.NET實際輸出到Web瀏覽器的內容相匹配。

+0

感謝您的回覆。我編輯了標記,但現在出現此錯誤「Microsoft JScript運行時錯誤:'TextBox1'未定義」。我認爲它試圖在參數前添加用戶控件的實例名稱。像UserControl1_TextBox1等... – TroyS 2011-04-18 17:21:36

+0

至於爲什麼我用<%...%>是我最初試圖做到這一點'%=「ShowList(」+ Me.ClientID +「_TextBox1,」+ Me.ClientID +「_ListBox1)」%> 」。我忘了發佈它。 – TroyS 2011-04-18 17:26:56

+0

我認爲這會從VB.NET代碼中更好地完成。在您的Page_Load事件中:'Image1.Attributes.Add(「onclick」,「ShowList(」+ TextBox1.ClientID +「,」+ ListBox1.ClientID +「)」)' – 2011-04-18 18:01:33