簡體   English   中英

通過JavaScript禁用轉發器內的特定驗證器

[英]Disable specific Validators inside a repeater via Javascript

我在中繼器中有一些字段,我需要對其進行驗證。

場景如下:當頁面加載時,我僅獲得了一組字段(名字,姓氏等),並且獲得了“添加其他用戶”鏈接,如果單擊該鏈接,它將再次在頁面上添加相同的字段。底部。

現在是代碼部分:在我的情況下,我需要運行轉發器4次(因此,頁面上的字段從一開始就運行4次)。 然后隱藏它們,就像隱藏包含它們的<div>一樣。 單擊按鈕后,我將顯示第一個隱藏的div,依此類推。

一些代碼(不是全部):

 <asp:Repeater ID="rptOtherPeople" runat="server">
 <HeaderTemplate>
      <table>
           <thead>
                <tr>
                     <td>
                          <h3>Други лица</h3>
                     </td>
                </tr>
           </thead>
           <tbody class="GridBody"> 
 </HeaderTemplate>
 <ItemTemplate>
      <tr class="GridRow" id="personRow" style="display: none">
           <td>
                <asp:TextBox ID="txtFirstName" CssClass="mid-inp" Text="" runat="server"></asp:TextBox>
           </td>
      </tr>
 </ItemTemplate>
 <FooterTemplate>
    </tbody>
    </table>
 </FooterTemplate>
 </asp:Repeater>

這是顯示下一行的javascript:

$(document).ready(function () {
        var peopleNum = 1;

        if ($(".GridBody tr").length > 0) {
            var tr = $(".GridBody tr")[0];
            tr.style.display = 'table-row';
            tr.setAttribute('hidden', 'false');
            var anc = tr.getElementsByTagName('a');
        }

        if ($(".GridBody tr").length > 0 && peopleNum > 0) {
            for (i = 0; i < peopleNum; i++) {
                var tr = $(".GridBody tr")[i];
                tr.style.display = 'table-row';
                tr.setAttribute('hidden', 'false');
                if (i > 0) {
                    var anc = tr.getElementsByTagName('a');
                    if (anc[i] != undefined)
                        anc[i].style.display = 'none';
                }
            }
        }
    })

    function addPerson() {
        var body = $(".GridBody");
        var indexOfNextRow = $('tr[class="GridRow"][hidden="false"]').length;
        var tr = $(".GridBody tr")[indexOfNextRow];
        tr.style.display = 'table-row';
        tr.setAttribute('hidden', 'false');
    }

問題:例如,我希望該字段為必填項。 我放置了RequiredFieldValidator並在某些情況下將其禁用,而在其他情況下將其啟用。 事實是,我在頁面上獲得了4個RequiredFieldValidators,並且一次只能打開或關閉所有它們。 我只想激活其中之一。 我找不到辦法,因為它們幾乎完全相同。 有任何想法嗎?

我假設我無法在后面的代碼中對此進行分類。 我可以通過javascript處理一個RequiredFieldValidator嗎(如何識別我想要的一個)。 有些人喜歡jquery驗證。 它在這種情況下適用嗎?如何使用(我以前從未使用過jquery驗證)?

編輯1

好的,控件並不相同。 在瀏覽器中,生成的ID為: ctl00_SPWebPartManager1_g_f6926ea5_98ba_46c1_b157_4f1ddc46885d_ctl00_Step21_otherPeople_rptOtherPeople_ctl01_rv1 ,但是我無法從此處通過Javascript訪問驗證器

您可以在服務器端或客戶端禁用驗證器。如果我理解您的問題,那么您要查找的就是禁用特定驗證器,說必填字段驗證器。為此,這是一個簡單的JavaScript代碼來禁用驗證器。

    function DisableRFValidators() {
        var ValidatorToDisable = document.getElementById("RequiredFieldValidator2");
        ValidatorEnable(ValidatorToDisable, false);
    }

修復! 這是代碼:

    $("#aspnetForm").validate();

    $(".required").each(function (index) {
        if ($(this).attr("id").indexOf("txtFirstName") >= 0) {
            $(this).rules("add", {
                required: true,
                minlength: 3,
                messages: {
                    required: "<div class='val' style='color:red'>Name is Required!</div>",
                    minlength: "<div class='val' style='color:red'>Minimum number of symbols = 3!</div>"
                }
            });
        }
        else if ($(this).attr("id").indexOf("txtFirstName") >= 0){
            $(this).rules("add", {
                required: false
            });
        }
    });

function validateData() {
    var result = $("#aspnetForm").valid();
    return result;
}

function btnNextClick(btn_this) {
    var btnNext = document.getElementById("<%=btnMoveNextHidden.ClientID%>");
    if (btnNext != null && validateData() == true) {
        btnNext.click();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM