2013-03-04 48 views
1

在我的頁面上我有一個單選按鈕列表和一個文本框。CustomValidator文本框需要radiobuttonlist選擇

默認情況下,該文本框處於隱藏狀態,如果用戶單擊是,則會顯示該文本框。一旦他們點擊是,那麼文本框必須填寫,然後才能繼續。

我已經把下面的代碼,但它似乎並沒有工作,當按下按鈕進入下一頁它繼續而不是停止,並要求用戶在框中輸入的東西。

function Q12iYes() {   
     document.getElementById('txt12i').style.display = "block" 
    } 
    function Q12iNo() { 
     document.getElementById('txt12i').style.display = "none" 
    }  


<asp:RadioButtonList ID="rbtn12" runat="server" RepeatDirection="Horizontal"> 
    <asp:ListItem Value="Yes" onclick="Q12iYes()" /> <asp:ListItem Value="No" Selected="True" onclick="Q12iNo()" /> 
    </asp:RadioButtonList> 
      <br /> 

    12.i) If &#39;Yes&#39; please provide details<br /> 
    <br /> 
    <asp:TextBox ID="txt12i" runat="server" Height="62px" TextMode="MultiLine" Width="343px"></asp:TextBox> 
      <br />     
      <asp:CustomValidator ID="MyTxtBoxValidator" runat="server" ControlToValidate="txt12i" ValidateEmptyText="true" ErrorMessage="Please enter some values into Textbox" 
      ClientValidationFunction="validateMyBtn" Display="Dynamic"> </asp:CustomValidator> 
       <script type="text/javascript"> 
        function validateMyBtn(oSrc, args) { 
         var rbtnValue = null; 
         var rbtnList = document.getElementsByName('<%=rbtn12.ClientID %>'); 
         var radio = rbtnList[0].getElementsByTagName("input"); 
         for (var i = 0; i < radio.length; i++) { if (radio[i].checked) rbtnValue = radio[i].value; } 
         if (rbtnValue == "Yes") { args.IsValid = !(args.Value == "") } 
         else { args.IsValid = true; } 
} 
</script> 

<asp:Button ID="btnContinue" runat="server" OnClick="btnContinue_Click" Text="Continue" /> 

我有看如何做到這一點,但沒有我看到了無論是工作,或者幫助我理解我要去哪裏錯了。

任何人都可以幫忙嗎?

+0

您是否需要自定義驗證器?爲什麼不使用必需的字段驗證程序?如果輸入框不可見,則所需的字段驗證程序不會嘗試驗證。 – 2013-03-04 12:12:56

+0

從我所有的搜索它似乎自定義驗證器是我需要的,因爲我使用JavaScript來顯示和隱藏文本框時,用戶選擇。我試圖找到最有效的方法。 – saintsfanuk 2013-03-04 12:36:22

+0

你能夠使用jQuery嗎? – 2013-03-04 12:55:33

回答

3

一個CustomValidator不驗證默認是空的文本,所以設置ValidateEmptyText property

<asp:CustomValidator ValidateEmptyText="true" ID="MyTxtBoxValidator" runat="server" ... 

編輯問題是你的JavaScript驗證功能,只能在IE瀏覽器。這是一個在其他瀏覽器中也可以使用的版本:

function validateMyBtn(oSrc, args) { 
     var rbtnList = document.getElementsByName('<%=rbtn12.ClientID %>'); 
     var noClicked = false; 
     for (var x = 0; x < rbtnList.length; x++) { 
      if (rbtnList[x].checked) { 
       noClicked = rbtnList[x].value == "No"; 
       break; 
      } 
     } 
     if (noClicked) 
      args.IsValid = true; 
     else 
      args.IsValid = args.Value.trim().length > 0; 
} 
+0

這已經在我提供的代碼示例中完成了嗎? – saintsfanuk 2013-03-04 12:11:33

+0

@saintsfanuk:忽略了它,因爲在這方面它很重要,所以你應該明確地提到它。 – 2013-03-04 12:12:35

+0

改變了它,它仍然沒有區別,所以我不認爲這是問題。 – saintsfanuk 2013-03-04 12:15:00