JavaScript в asp.net

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

6
задан Matt DeKrey 19 April 2015 в 20:16
поделиться

6 ответов

Каждый ListItem отображает радиокнопку с тем же параметром имени; Я бы посоветовал запустить приложение и посмотреть на сгенерированный источник, чтобы понять, что вам нужно делать, чтобы прослушивать события радиокнопки. По сути, идентификатор списка переключателей - это параметр имени, поэтому вы можете получить группу переключателей как (используя JQuery):

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

HTH.

0
ответ дан 17 December 2019 в 20:29
поделиться

Вы можете использовать jQuery для управления состоянием включения ввода (перевод HTML для TextBox) или вы можете использовать ASP.NET Ajax, чтобы вы могли установить оба элемента управления внутри панели обновления, в этом случае вы не будете см. страницу, которая перезагружается при обратной передаче, что должно произойти, чтобы вы могли изменить статус TextBox в каком-либо другом событии. Tbh я бы выбрал ASP.NET Ajax, потому что мой опыт показывает, что jQuery не так хорошо работает с элементами управления ASP.NET, когда дело доходит до сложных вещей, т.е. ASP.NET использует javascript для активации событий, что может привести к тому, что либо jQuery, либо ASP.NET не будут работать должным образом.

Удачи вам с панелями обновлений ...

1
ответ дан 17 December 2019 в 20:29
поделиться

Вот, пожалуйста:

<%@ 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
ответ дан 17 December 2019 в 20:29
поделиться

Напишите код следующим образом

<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" равно "Нет".

0
ответ дан 17 December 2019 в 20:29
поделиться

Используя 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);
  }
});
1
ответ дан 17 December 2019 в 20:29
поделиться
$('#<%= 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.

0
ответ дан 17 December 2019 в 20:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: