<asp:RadioButtonList ID="RdoBtnHasNotified" runat="server" RepeatDirection="Horizontal" AutoPostBack="True" OnSelectedIndexChanged="RdoBtnHasNotified_SelectedIndexChanged">
<asp:ListItem Value="1">Yes</asp:ListItem>
<asp:ListItem Value="0" Selected="True">No</asp:ListItem>
</asp:RadioButtonList>
<asp:TextBox ID="TxtHowNotified" runat="server" TextMode="MultiLine" MaxLength="100"></asp:TextBox>
Я хочу включить TextBox
путем нажатия RadioButtonList
, без использования autopostback=true
. Как я могу сделать это с JavaScript?
Каждый ListItem отображает радиокнопку с тем же параметром имени; Я бы посоветовал запустить приложение и посмотреть на сгенерированный источник, чтобы понять, что вам нужно делать, чтобы прослушивать события радиокнопки. По сути, идентификатор списка переключателей - это параметр имени, поэтому вы можете получить группу переключателей как (используя JQuery):
$("input[name='<%= rbl.ClientID%>']").click(function() {
var tb = $("#textboxid");
//do something here; this points to the radio button
});
HTH.
Вы можете использовать jQuery для управления состоянием включения ввода (перевод HTML для TextBox) или вы можете использовать ASP.NET Ajax, чтобы вы могли установить оба элемента управления внутри панели обновления, в этом случае вы не будете см. страницу, которая перезагружается при обратной передаче, что должно произойти, чтобы вы могли изменить статус TextBox в каком-либо другом событии. Tbh я бы выбрал ASP.NET Ajax, потому что мой опыт показывает, что jQuery не так хорошо работает с элементами управления ASP.NET, когда дело доходит до сложных вещей, т.е. ASP.NET использует javascript для активации событий, что может привести к тому, что либо jQuery, либо ASP.NET не будут работать должным образом.
Удачи вам с панелями обновлений ...
Вот, пожалуйста:
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void RdoBtnHasNotified_PreRender(object sender, EventArgs e)
{
foreach (ListItem item in RdoBtnHasNotified.Items)
item.Attributes.Add("onclick", string.Format("toggleTextBox(this,'{0}');", TxtHowNotified.ClientID));
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script type="text/javascript">
function toggleTextBox(radioButton, textBoxId) {
document.getElementById(textBoxId).disabled = radioButton.value != "1";
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:RadioButtonList ID="RdoBtnHasNotified" OnPreRender="RdoBtnHasNotified_PreRender"
runat="server" RepeatDirection="Horizontal">
<asp:ListItem Value="1">Yes</asp:ListItem>
<asp:ListItem Value="0" Selected="True">No</asp:ListItem>
</asp:RadioButtonList>
<asp:TextBox ID="TxtHowNotified" runat="server" TextMode="MultiLine" MaxLength="100" Enabled="false"></asp:TextBox>
</div>
</form>
</body>
</html>
Напишите код следующим образом
<script type="text/javascript">
$(document).ready(function() {
$("input[name='RdoBtnHasNotified']").change(function() {
$("input[name='RdoBtnHasNotified']:checked").val() == '1' ? $('#TxtHowNotified').removeAttr("disabled") : $('#TxtHowNotified').attr('disabled', 'true');
});
});
</script>
, а также отключите текстовое поле (Enabled = "false"), поскольку изначально значение "RdoBtnHasNotified" равно "Нет".
Используя jQuery, вы можете получить довольно индивидуальный результат, подключившись к изменениям на переключателях ...
$("#<%= RdoBtnHasNotified.ClientID %> > input[type=radio]").change(function(){
// this function is called whenever one of the radio button list's control's change
// the $(this) variable refers to the input control that triggered the event
var txt = $("#<%= TxtHowNotified.ClientID %>");
if($(this).val()=="1") {
txt.removeAttr("disabled");
} else {
txt.attr("disabled", true);
}
});
$('#<%= RdoBtnHasNotified.ClientID %> > input[type=radio]').click(function()
{
var txtbox = $('#<%= TxtHowNotified.ClientID %>');
if($(this).val() == '1')
{
document.getElementById('#<%= TxtHowNotified.ClientID %>').disabled = false;
}
else
{
document.getElementById('#<%= TxtHowNotified.ClientID %>').disabled = true;
}
});
Я думаю, что использование события изменения не сработает в IE.