2011-08-26 50 views
1

我有每個頁面在一個單獨的細胞上的大量的複選框,我需要找回所有的有過,因爲原來的改變了他們的價值的複選框。jQuery的獲得所有改變複選框

我存儲被稱爲「數據原始值」中包含的複選框跨度屬性的初始值,跨度是由asp.net加入時,我添加的屬性的屬性集合。

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代碼,試圖找出所有已更改的checkbvoxes的,但它似乎甚至將返回所有複選框那些沒有改變的。 ():(this).checked!= $(this).parent()。attr(「data-original-value」); });

我相信我的思念與比較的東西,但我不能完全肯定的JavaScript/jQuery的心不是我的fortay。

回答

1

你不需要重新發明輪子,有一個預定義的屬性defaultChecked爲複選框,將它與checked-property進行比較。

$(':checkbox').filter(function() 
         { 
         return ($(this).prop('checked') 
            != 
           $(this).prop('defaultChecked')); 
         }); 

這可能是有趣的你:Override the form 'Reset' behavior when data is refreshed via ajax


請注意: jQuery中< 1.6使用this.checked != this.defaultChecked,它不會使用工作$.attr()

+0

例子我不是jQuery的1.6,所以我認爲我可以改用.attr? –

+0

不,這不起作用,請參閱我的編輯 –

0

你是一個比較字符串和布爾,使用的東西的字符串轉換爲布爾像

VAR myBool =布爾(「假」); // ==真

VAR myBool = !! 「假」; // ==真

+0

我需要兩行呢?第二個人做什麼? –

+0

羅,只是兩個不同的如何將JS字符串轉換爲布爾 – kmcc049

0

您比較複選框選中的值是對一個字符串值,它是True所以過濾器將不會返回任何一個布爾值。試試這個

var checkBoxes = $(":checkbox").filter(function() { 
     return $(this).checked.toString() != $(this).parent().attr("data-original-value").toLowerCase(); 
}); 
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