jquery获取所有更改的复选框

时间:2011-08-26 03:45:19

标签: jquery asp.net checkbox

我在页面上有大量的复选框,每个复选框位于一个单独的单元格中,我需要检索自原始版本以来其值已更改的所有复选框。

我将原始值存储在包含复选框的范围中名为“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不是我的好事。

4 个答案:

答案 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进行比较,使用类似

的字符串将字符串转换为bool

var 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