我的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>
答案 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的元素导致问题。