2015-12-23 69 views
2

IDE:VS 2012爲什麼單選按鈕不通過ASP控制的clientID的

設計代碼
方案1:用RUNAT = 「服務器」(這是需要的話),JavaScript的功能不起作用

<asp:TextBox ID="txtCost" runat="server" ReadOnly="true" Text="250/-"></asp:TextBox> 


<input type="radio" name="myRadios" runat="server" id="rb1" checked="true" onchange="javascript:UpdateClick(this,'<%=txtCost.ClientID %>');" value="1" /> Monthly 
     <input type="radio" name="myRadios" runat="server" id="rb2" value="2" onchange="javascript:UpdateClick(this,'<%=txtCost.ClientID%>');" /> Weekly  

場景2:runat =「server」被刪除(這是必需的),javascript函數正在工作。

<asp:TextBox ID="txtCost" runat="server" ReadOnly="true" Text="250/-"></asp:TextBox> 


<input type="radio" name="myRadios" id="rb1" checked="true" onchange="javascript:UpdateClick(this,'<%=txtCost.ClientID %>');" value="1" /> Monthly 
     <input type="radio" name="myRadios" id="rb2" value="2" onchange="javascript:UpdateClick(this,'<%=txtCost.ClientID%>');" /> Weekly 

JavaScript函數:

function UpdateClick(myRadio, ClientID) { 

     currentValue = myRadio.value; 
     if (currentValue == '1') { 
      var txtCostBox = document.getElementById(ClientID); 
      txtCostBox.value = '250/-'; 
     } 
     else { 
      var txtCostBox = document.getElementById(ClientID); 
      txtCostBox.value = '600/-'; 

     } 
     return false; 
    } 

問題:

所以,當我在單選按鈕刪除RUNAT = 「服務器」,代碼的工作,當我把RUNAT = 「服務器」 ,而不是得到實際的客戶端ID我得到客戶端ID:

'<%=txtCost.ClientID%>' 

我有一個要求,我需要保持與runat =「服務器」單選按鈕,你能告訴我如何解決上述問題。

+0

這是沒有意義的...... runat =服務器意味着你需要ClientID ...所以你說的話似乎顛倒了。 – MaxOvrdrv

+0

你甚至需要傳遞'txtCost'的'ClientID'嗎?它的ID顯示爲靜態。另外還不清楚你的js是否一直運行,或者它是否沒有收到'ClientID'。 – Crowcoder

回答

0

你可以放在後面的代碼中onclick,在Page_Load

rb1.Attributes["onclick"] = "javascript:UpdateClick(this,'" + txtCost.ClientID + "')"; 
rb2.Attributes["onclick"] = "javascript:UpdateClick(this,'" + txtCost.ClientID + "');" 

同時,嘗試改變"<%=txtCost.ClientID %>"到:"<%# txtCost.ClientID %>"

還有其他一些方法可以做到這一點。你也可以改變你的代碼:

function UpdateClick(myRadio) { 

    var textObj = document.getElemmentById("<%# txtCost.ClientID %>"); 
    ... 
} 
+0

rb1.Attributes [「onclick」] =「javascript:UpdateClick(this,'」+ txtCost.ClientID +「')」,nice solution,it worked。,thanks – yogeshkmrsoni

0

runat服務器意味着runat服務器,javascript是客戶端。如果您使用的是asp控件,則需要runat服務器。由於您使用類型radio runat服務器的HTML輸入不起作用。

備選:

<asp:RadioButtonList ID="id" runat="server"> 
    <asp:ListItem Selected="True" Value="0">Item 1</asp:ListItem> 
    <asp:ListItem Value="1">Item 2</asp:ListItem> 
</asp:RadioButtonList> 
0

更改單選按鈕,您的onchange呼籲如下圖所示

<input type="radio" name="myRadios" runat="server" id="rb1" checked="true" onchange="javascript:UpdateClick(this);" value="1" /> Monthly 
    <input type="radio" name="myRadios" runat="server" id="rb2" value="2" onchange="javascript:UpdateClick(this);" /> Weekly  

和你的JavaScript函數

function UpdateClick(myRadio) { 
     currentValue = myRadio.value; 
     if (currentValue == '1') { 
      $('#<%=txtCost.ClientID%>').val('250/-'); 
     } 
     else { 
      $('#<%=txtCost.ClientID%>').val('600/-'); 

     } 
     return false; 
    } 
+0

txtCost.ClientID需要作爲參數傳遞,因爲他們在用戶控制上。並且父頁面可以包含該用戶控件的多個實例。 – yogeshkmrsoni

0

如果你是顯示該文本框中在用戶控件上,或者在使用母版頁的頁面中,這就是爲什麼您沒有通過runat = server獲取ID的原因。

將文本框的客戶端ID模式更改爲靜態。

<asp:TextBox ID="txtCost" runat="server" ClientIDMode="Static" ReadOnly="true" Text="250/-"></asp:TextBox> 

不帶靜電的ID是一樣的東西textCost $ 1000blabla ...

如果你想有一個動態的ID與靜態,產生從服務器端的JavaScript(使用C#txtCost.GetClientID())並且您將擁有完整的客戶端ID。

相關問題