使用jQuery在gridview ItemTemplate中的复选框

时间:2011-08-17 20:47:15

标签: jquery asp.net

我在ItemTemplate中有一个带有Checkbox的ASP.NET GridView。我只需要检查(使用jQuery)是否选择了其中任何一个以便完成其他任务。使用下面的代码没有任何事情发生。如果我给CheckBox一个ID,它将工作,但只有第一个复选框。

这是GridView:

 <asp:GridView ID="gvData" runat="server" AutoGenerateColumns="false" SkinID="GridView"
            DataKeyNames="Check Config">
            <Columns>
                <asp:BoundField HeaderText="Schedule ID" DataField="Check Config"></asp:BoundField>
                <asp:BoundField HeaderText="Check Configuration" DataField="Check Configuration" />
                <asp:BoundField HeaderText="Shift" DataField="Shift" />
                <asp:BoundField HeaderText="Earliest Time" DataField="Earliest Time" />
                <asp:BoundField HeaderText="Alarm Time" DataField="Alarm Date" />
                <asp:BoundField HeaderText="Disposition" DataField="Disposition" />
                <asp:TemplateField HeaderText="Disable">
                    <ItemTemplate>
                        <asp:CheckBox runat="server" CssClass="alarmSelections" />
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>

这是jQuery(编辑以获得更多说明):

 //if some or all rows are selected, create the html button "btnEnterComment"
            $('[id$="gvData"]').change(function () {
                //check to see if the button already exists
                if ($('#divButtonHolder').hasClass('classFlag')) {
                    return;
                }
                else {
                    if ($('.alarmSelections:checked').length) {
                        $('#divButtonHolder').html('<input type="button" id="btnEnterComment" value="Disable Marked Alarms" style="border: 2px solid green; background-color: #fff;height: 25px; cursor: hand;"></input>');
                        $('#divButtonHolder').addClass('classFlag');
                    }


                }

4 个答案:

答案 0 :(得分:2)

尝试:

// evaluates to true if one or more
// 'alarmSelections' checkboxes have been checked
if($('.alarmSelections:checked').length) {
    ...

答案 1 :(得分:1)

给你的复选框一个ID chkABC

使用以下语法

访问所有复选框
$("[ID*=chkABC]").each(function(){
//use this. any property to play with each checkbox
})

当渲染数据网格时,动态生成所有控件ID。 [ID * = chkABC]语法将选择以chkABC名称结尾的所有控件。

知道这种语法是将jquery与repeater / datagrid控件一起使用的关键。我很早就找到了这个解决方案。希望你不再挣扎。

答案 2 :(得分:0)

alarmSelections将返回一个复选框数组。

你必须使用.each(function(){code})并循环查看是否有任何检查。

答案 3 :(得分:0)

$('[id$="gvData"]')

如果我正确地解析这个问题,那么它正在寻找一个具有如下属性的渲染元素:

<sometag id$="gvData">

我不熟悉您在选择器中使用的“id $”表示法 - 是“$”通配符还是其他特殊字符?

另外,我认为您的GridView实际上不会使用id“gvData”进行渲染。 ASP.NET可能会将其呈现为“ct100_gvData”或类似内容,以确保页面的唯一性。

通常,当我需要在jquery中引用ASP生成的控件时,我的代码看起来像这样:

$('#<%= gvData.ClientID %>')

这应该解析为“ct100_gvData”值,或者ASP.NET在呈现控件时分配的任何联合ID。