我在页面上有大量的复选框,每个复选框位于一个单独的单元格中,我需要检索自原始版本以来其值已更改的所有复选框。
我将原始值存储在包含复选框的范围中名为“data-original-value”的属性中,当我将属性添加到Attributes集合时,asp.net添加了span。
void Grid_ItemDataBound(object sender, GridItemEventArgs e)
{
var checkBoxControls = e.Item.Controls.All().OfType<CheckBox>();
foreach (var checkBox in checkBoxControls)
{
checkBox.Attributes["data-original-value"] = checkBox.Checked.ToString();
}
}
输出html看起来如下所示:
<td>
<span data-original-value="True">
<input id="ctl00_MainContent_ControlLandMatrixControl_grid_ctl00_ctl04_ctl01" type="checkbox" checked="checked" name="ctl00$MainContent$ControlLandMatrixControl$grid$ctl00$ctl04$ctl01">
</span>
</td>
我正在使用以下JQuery代码来尝试识别所有已更改的checkbvox,但它似乎返回所有复选框,即使那些没有更改的复选框。
var checkBoxes = $(“:checkbox”)。filter(function(){return $(this).checked!= $(this).parent()。attr(“data-original-value”);} );
我相信我错过了比较的东西,但我不完全确定javascript / jquery不是我的好事。
答案 0 :(得分:1)
你不需要重新发明轮子,有一个预定义的属性defaultChecked for checkboxes,将它与checked-property进行比较。
$(':checkbox').filter(function ()
{
return ($(this).prop('checked')
!=
$(this).prop('defaultChecked'));
});
这可能对你很有意思:Override the form 'Reset' behavior when data is refreshed via ajax
请注意:在jQuery&lt; 1.6中使用this.checked != this.defaultChecked
,使用$.attr()
无法使用
答案 1 :(得分:0)
您正在将字符串与bool进行比较,使用类似
的字符串将字符串转换为boolvar myBool = Boolean(“false”); // == true
var myBool = !!“false”; // == true
答案 2 :(得分:0)
您正在比较复选框选中的值,它是一个布尔值,而字符串值是True
,因此过滤器不会返回任何内容。试试这个
var checkBoxes = $(":checkbox").filter(function () {
return $(this).checked.toString() != $(this).parent().attr("data-original-value").toLowerCase();
});
答案 3 :(得分:0)
This might help....
var inputs = document.getElementsByTagName("input"); //or document.forms[0].elements;
var cbs = []; //will contain all checkboxes
var checked = []; //will contain all checked checkboxes
for (var i = 0; i < inputs.length; i++) {
if (inputs[i].type == "checkbox") {
cbs.push(inputs[i]);
if (inputs[i].checked) {
checked.push(inputs[i]);
}
}
}
var nbCbs = cbs.length; //number of checkboxes
var nbChecked = checked.length; //number of checked checkboxes