我在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');
}
}
答案 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。