【问题标题】:Disable specific Validators inside a repeater via Javascript通过 Javascript 禁用中继器中的特定验证器
【发布时间】:2013-11-13 06:40:19
【问题描述】:

我在转发器中有一些字段,我需要验证它们。

场景如下: 当页面加载时,我只得到一组字段(名字、姓氏等),并且我得到一个链接“添加另一个用户”,如果您单击该链接,它会在底部再次添加相同的字段。

现在是代码部分: 在我的情况下,我需要运行转发器 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 中从此处访问验证器

【问题讨论】:

    标签: c# javascript jquery asp.net validation


    【解决方案1】:

    您可以禁用服务器端或客户端的验证器。如果我理解您的问题,您要查找的是禁用特定的验证器说必填字段验证器。为此,这里有一个简单的 JavaScript 代码来禁用验证器。

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

    【讨论】:

    • 是的,我想禁用某个验证器。如果我使用您的代码,我将禁用 ID 为 RequiredFieldValidator2 的每个验证器,其中有 4 个(显然可以有 2 个具有相同 ID 的验证器???)。我只想禁用其中一个,而不是全部。中继器使用相同的 ID 创建它们。我知道这很奇怪,直到我看到它才相信它
    • 好吧,它们不一样。在浏览器中,ID 是:ctl00_SPWebPartManager1_g_f6926ea5_98ba_46c1_b157_4f1ddc46885d_ctl00_Step21_otherPeople_rptOtherPeople_ctl01_rv1 但我无法在我的javascript中访问它
    【解决方案2】:

    已修复!代码如下:

        $("#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();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-27
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 2015-09-07
      • 1970-01-01
      • 2010-09-28
      • 1970-01-01
      相关资源
      最近更新 更多