2010-05-31 13 views
6
<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> 

Chcę włączyć TextBox klikając na RadioButtonList, bez użycia autopostback=true. Jak mogę to zrobić w JavaScript?javascript w ASP.NET

Odpowiedz

1

Możesz użyć jQuery do manipulowania stanem włączonego wejścia (tłumaczenie HTML dla TextBox) lub możesz użyć Ajaxa ASP.NET, dzięki czemu możesz ustawić obie kontrolki wewnątrz panelu aktualizacji, w tym przypadku nie zobaczysz przeładowania strony przy odświeżeniu strony co musi się zdarzyć, aby zmienić status TextBox na inne wydarzenie. Tbh chciałbym przejść z Ajax ASP.NET, ponieważ moje doświadczenie pokazuje, że jQuery nie działa tak dobrze z formantami ASP.NET, jeśli chodzi o złożone rzeczy, tj. ASP.NET wykorzystuje javascript do aktywacji zdarzeń, co może spowodować, że albo jQuery, albo ASP.NET nie będą działać tak, jak można się spodziewać.

Powodzenia z paneli aktualizacji ...

0

Każdy ListItem renderuje przycisk radiowy z tym samym parametrem name; Proponuję uruchomić aplikację i przyjrzeć się wygenerowanemu źródłu, aby zorientować się, co musisz zrobić, aby usłyszeć zdarzenia z przyciskami radiowymi. Zasadniczo identyfikator listy przycisk radiowy jest parametrem nazwa, dzięki czemu można uzyskać grupa przycisków radiowych (przy użyciu JQuery):

$("input[name='<%= rbl.ClientID%>']").click(function() { 
    var tb = $("#textboxid"); 
    //do something here; this points to the radio button 
}); 

HTH.

0

Proszę bardzo:

<%@ 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> 
0

Wpisz kod w następujący sposób

<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> 

a także wyłączyć tekstowe (Włączone = "false"), ponieważ initialy wartości "RdoBtnHasNotified" nie jest".

1

jQuery, można mieć dość niestandardowy wynik, zaczepiając się do zmian na przycisków radiowych ...


$("#<%= 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); 
    } 
}); 
0
$('#<%= 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; 
    } 
}); 

myślę za pomocą zmiany zdarzenie nie zostanie wyzwolony w IE.

Powiązane problemy