2011-02-10 6 views
1

각 radiobuttonlist가 선택되었는지 확인하려고합니다. radiobuttonlist는 SQL 데이터베이스에서 동적으로 생성됩니다. 다음 라인 오류는 "if (MyRadio [j] .checked) {", 오류가 "checked"가 null이거나 객체가 아닌 경우 "입니다. 다음은 코드입니다.javascript를 사용하여 gridview에서 radiobuttonlist를 확인하십시오.

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder2" runat="Server"> 
    <cc1:TabContainer ID="TabContainer1" runat="server" ActiveTabIndex="0" CssClass="ajax__myTab" Width="100%" ScrollBars="Horizontal"> 
     <cc1:TabPanel ID="TabPanel1" runat="server" HeaderText="" Enabled="true"> 
      <HeaderTemplate>Main</HeaderTemplate> 
      <ContentTemplate> 
       <table cellpadding="3" cellspacing="1"> 
        <tr> 
         <td style="text-align: right">Audit Status:</td> 
         <td> 
          <asp:DropDownList ID="ddlAuditStatus" runat="server"> 
           <asp:ListItem>InProgress</asp:ListItem> 
           <asp:ListItem>Completed</asp:ListItem> 
          </asp:DropDownList> 
         </td> 
        </tr> 
       </table> 
      </ContentTemplate> 
     </cc1:TabPanel> 
     <cc1:TabPanel ID="TabPanel2" runat="server" HeaderText="" Enabled="true"> 
      <HeaderTemplate>Questions</HeaderTemplate> 
      <ContentTemplate> 
       <asp:GridView ID="GridViewQuestions" runat="server" AutoGenerateColumns="False" BackColor="White" BorderColor="#999999" BorderStyle="Solid" BorderWidth="1px" CellPadding="5" CellSpacing="1" DataKeyNames="Pkey" DataSourceID="SqlDataSource1" ForeColor="Black" GridLines="Vertical"> 
        <FooterStyle BackColor="#CCCCCC" /> 
        <Columns> 
         <asp:TemplateField> 
          <ItemTemplate> 
           <asp:Label ID="lblQuestion" runat="server"></asp:Label> 
           <asp:HiddenField ID="hdnPkey" runat="server" Value='<%# Bind("Pkey") %>' /> 
           <asp:HiddenField ID="hdnRequiresAnAnswer" runat="server" Value='<%# Bind("RequiresAnAnswer") %>' /> 
          </ItemTemplate> 
         </asp:TemplateField> 
         <asp:TemplateField HeaderText="Answer"> 
          <ItemTemplate> 
           <asp:RadioButtonList ID="RadioButtonList1" runat="server" RepeatDirection="Horizontal" Visible="false"> 
            <asp:ListItem>Yes</asp:ListItem> 
            <asp:ListItem>No</asp:ListItem> 
            <asp:ListItem>N/A</asp:ListItem> 
           </asp:RadioButtonList> 
          </ItemTemplate> 
          <HeaderStyle Width="130px" /> 
          <ItemStyle Width="130px" /> 
         </asp:TemplateField> 
        <PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" /> 
        <SelectedRowStyle BackColor="#000099" Font-Bold="True" ForeColor="White" /> 
        <HeaderStyle BackColor="Silver" Font-Bold="True" ForeColor="Black" /> 
        <AlternatingRowStyle BackColor="#CCCCCC" /> 
       </asp:GridView> 
      </ContentTemplate> 
     </cc1:TabPanel> 
    </cc1:TabContainer> 
<script type="text/javascript"> 

    function fcnUpdateMain() { 

     var MyStatus = document.getElementById("<%=ddlAuditStatus.ClientID%>").value 
     var grid = document.getElementById("<%= GridViewQuestions.ClientID %>"); 

     if (grid.rows.length > 0) { 

      for (i = 2; i < grid.rows.length + 1; i++) { 

       if (i < 10) { 
        i = "0" + i 
       } else { 
        i = i 
       } 

       var MyReqAnswer = document.getElementById("ctl00_ContentPlaceHolder2_TabContainer1_TabPanel2_GridViewQuestions_ctl" + i + "_hdnRequiresAnAnswer").value 
       var MyRadio = document.getElementById("ctl00_ContentPlaceHolder2_TabContainer1_TabPanel2_GridViewQuestions_ctl" + i + "_RadioButtonList1") 

       if (MyStatus == "Completed") { 

        if (MyReqAnswer == "Yes") { 

         var options = document.getElementsByTagName("input") 
         for(x = 0; x < options.length; ++x) { 
          if(options[x].type == "radio") { 

           for (var j = 0; j < MyRadio.length; j++) { 
            if (MyRadio[j].checked) { 
            } else { 
             alert("You must select an answer for all questions.") 
             document.getElementById("ctl00_ContentPlaceHolder2_TabContainer1_TabPanel2_GridViewQuestions_ctl" + i + "_ddlProductInterest").focus() 
             return false; 
            } 
           } 
          } 
         } 
        } 
       } 
      } 
     } 
    } 
</script> 

답변

1

난 당신이 이미 RadioButtonList 컨트롤이 해당 테이블 내에서 <input> 각 라디오 버튼으로 <table>로 렌더링됩니다 것을 깨달았다 고 생각 주셔서 감사합니다. 따라서 RadioButtonList1에 핸들을 가져오고 MyRadio[j]을 사용하여 배열로 액세스하려고하면 작동하지 않습니다.

var options = document.getElementsByTagName("input") 

대신 읽어야 :

var options = MyRadio.getElementsByTagName("input") 

페이지의 모든 것보다 당신이 아니라 그 RadioButtonList 컨트롤 내의 입력 태그의 단지 컬렉션을 줄 것이다

나는 다음 줄을 생각한다 . 해당 옵션 모음이 있으면 RadioButtonList 컨트롤을 다시 참조 할 필요가 없습니다.

나는이 크게 당신이 무엇을 통해 단순화 이해하지만 당신을 위해 여기 예입니다 :

<form runat="server"> 
<asp:RadioButtonList runat="server" id="RadioButtonList1"> 
    <asp:ListItem>Yes</asp:ListItem> 
    <asp:ListItem>No</asp:ListItem> 
    <asp:ListItem>N/A</asp:ListItem> 
</asp:RadioButtonList> 
<input type="button" onclick="fcnUpdateMain()" value="Click" /> 
<script type="text/javascript"> 

    function fcnUpdateMain() 
    { 
     var MyRadio = document.getElementById("<%=RadioButtonList1.ClientID%>") 
     var options = MyRadio.getElementsByTagName("input") 
     var somethingChecked = false; 
     for(x = 0; x < options.length; ++x) 
     { 
      if (options[x].checked) 
      { 
       somethingChecked = true; 
      } 
     } 
     if (!somethingChecked) 
     { 
      alert("You must select an answer for all questions.") 
      return false; 
     } 
    } 
</script> 
</form> 
+0

가 대단히 감사합니다 !!!! 나는 이것을 해결하려고 많은 시간을 보냈다. – Mike

+0

그러나 RadioButtonList가 Gridview 내부에 있다면 어떻게하면 @Mike를 사용할 수 있었습니까? 먼저 부모 노드를 찾은 다음 RadioButtonList 컨트롤 FindControl을 찾아야하지 않습니까? 위의 것은 나를 위해 작동하지 않았기 때문에. 나는 여전히 "radiobuttonlist1 현재 컨텍스트에서"오류가 발생합니다. 감사합니다 – Fandango68

+0

나는 클라이언트 측에서이 모든 작업을 수행했습니다. fcnUpdateMain()은 javascript 함수입니다. 제출 버튼에서 함수를 호출합니다. 말이 돼? – Mike

관련 문제