IDE:VS 2012
设计师代码
场景1:使用runat =" server" (这是必要的),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 =&#34;服务器&#34;删除(这是必需的),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 =&#34; server&#34;在单选按钮中,代码正常工作,当我保持runat =&#34; server&#34;时,我没有获得实际的客户端ID,而是获取客户端ID:
'<%=txtCost.ClientID%>'
我有一个要求,我需要使用runat =&#34; server&#34;来保持单选按钮,你能告诉我如何修复上述问题。
答案 0 :(得分:0)
runat服务器意味着runat服务器,javascript是客户端。如果您正在使用asp控件,那么将需要runat服务器。当您使用类型为无线电跑道服务器的HTML输入时不起作用。
替代:
{{1}}
答案 1 :(得分: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 %>");
...
}
答案 2 :(得分:0)
将radiobutton中的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;
}
答案 3 :(得分: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。