如何在jQuery中获取具有特定ValidationGroup的文本框?

时间:2010-12-17 20:01:03

标签: javascript asp.net jquery

我的usercontrol中有一个ASP.NET TextBox ID =“txtDate”。它设置了ValidationGroup =“MyUC”。现在我的UC在Repeater Control中。因此,将存在同一文本框的多个实例。 我能够获得所有文本框:$("[id$='_txtDate']");

每个txtDate都会动态分配一个单独的ValidationGroup。 所以我想使用jQuery / javascript获得基于id + ValidationGroup的文本框。

怎么做?任何指导真的很感激。

根据Josiah的回复和我找到的方式编辑:

抱歉,我的方案包含整个代码有点复杂。简而言之,文本框附加到jquery datepicker,下面的代码在选择日期时运行。相同的处理程序附加到多个文本框。这就是我所拥有的:

var valgrp="MyGroup"; /*this mygroup is dynamic but keeping static for e.g.*/ 
var txtdate1 = $("[id$='txtDate']").filter(function(){if(this.Validators!=null){return this.Validators[0].validationGroup == valgrp;}});
var txtdate2 = $("[id$='txtDate']").filter(function(){return this.validationGroup == valgrp;});
alert("date1- " + txtdate1.val()); /*this returns date selected from datepicker*/
alert("date2 " + txtdate2.val()); /*this returns empty*/

取决于我想做其他事情的日期。所以txtdate1目前正在为我工​​作,我不需要在我的文本框中添加类。我正在玩txtdate2,这不符合我的预期,所以我不得不发布这个问题。

以下是一个示例测试,看不到this.validationGroup:

 $(function () {
            $("#btntest").click(function () {
                $("[id$='txtDate']").each(function () {
                    alert(this.validationGroup);//returns undefined
                    alert(this.Validators[0].validationGroup); //returns "test"
                });
            });
        });
  <input id="btntest" type="button" value="button" />
  <asp:TextBox ID="txtDate" runat="server" ValidationGroup="test"></asp:TextBox>
   <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" Text="*" ErrorMessage="Required." ControlToValidate="txtDate" ValidationGroup="test"></asp:RequiredFieldValidator>

3 个答案:

答案 0 :(得分:2)

虽然Josiah的解决方案不起作用,但他将类附加到文本框的想法可能是一个潜在的解决方案。由于它不完全符合我的需要,我会回答我自己的问题。这是我提出的解决方案:

var valgrp="MyGroup"; /*this mygroup is dynamic but keeping static for e.g.*/ 
var txtdate1 = $("[id$='txtDate']").filter(function(){if(this.Validators!=null){return this.Validators[0].validationGroup == valgrp;}});

以上回复我正在寻找的文本框。关键是

  

this.Validators [0] .validationGroup

它获得附加到文本框的第一个验证器控件的validationGroup(this)。

答案 1 :(得分:1)

从几次搜索中,验证组将作为属性存储在表单元素上。

所以你可以像这样添加一个类选择器:

$("[id$='_txtDate']").each(function(){
    var group = this.validationGroup,
        $this = $(this);
    if(!$this.hasClass('validationgroup'))
        $this.addClass('validationgroup ' + group);
});

当然,如果您有转发器,则每次重复行时都需要运行此代码。但现在您可以按验证组选择字段:

$('.validationgroup.[group name]')

答案 2 :(得分:0)

我不使用jQuery,但我认为它会是:

$("#txtDate[ValidationGroup='MyUc']")

因为jQuery的选择器基于CSS。这适用于document.querySelector,除非有一个具有相同id的元素导致问题。