开发者

How do I get a textbox with particular ValidationGroup in jQuery?

I have an ASP.NET TextBox ID="txtDate" in my usercontrol. It has ValidationGroup="MyUC" set. Now my UC is inside a Repeater Control. So there will be multiple instances of the same textbox. I am able to get all textboxes like: $("[id$='_txtDate']");

Each of the txtDate will have a separate ValidationGroup assigned to it, dynamically. So I want to get a textbox based on the id + ValidationGroup using jQuery / javascript.

How can it be done? Any guidance really appreciated.

Edited based on Josiah's Reply and the way I found:

Sorry, my scenario is kind of complicated to include entire code. In short the t开发者_开发知识库extboxes are attached to jquery datepicker and the code below runs when a date is selected. The same handler is attached to multiple textboxes. Here is what I have:

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*/

Depending on the date I want to do something else. So txtdate1 is currently working for me where I don't have to add class to my textbox. I was playing with the txtdate2 which isn't behaving how I was expecting and so I had to post this question.

Here is a sample test to see this.validationGroup not returned:

 $(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>


While Josiah's solution didn't work but his idea of attaching class to textbox could have been a potential solution. Since it didn't exactly fit my needs I would answer my own question. Here is the solution I came up with:

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;}});

The above returns me the textbox I am looking for. The key is

this.Validators[0].validationGroup

It gets the validationGroup of the first validator control attached to the textbox (this).


From a few searches, the validation group is stored as a property on the Form Element.

So you can add a class selector like so:

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

Of course if you have a repeater you will need to run this code each time an row is repeated. But now you can select fields by validation group like this:

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


I don't use jQuery, but I'd think it would be:

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

since jQuery's selectors are based on CSS. That works with document.querySelector, unless having more that one element with the same id is causing problems.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜