2013-10-29 88 views
0

我有一個表格,最左邊一列有一個複選框。當每一行的複選框被選中時,該行將改變顏色以反映這一點。在表格標題中,還有一個「全選」複選框。複選框onclick事件僅觸發兩次

JSFiddle Code Here

// Checks/unchecks all checkboxes ending with a particular ID string within a table 
function SelectAllRows(SelectAllCheckBox, IdEndsWith) { 
    var isChecked = $(SelectAllCheckBox).is(":checked"); 
    $(SelectAllCheckBox).closest('table').find("input[type='checkbox'][id*='" + IdEndsWith + "']").attr("checked", isChecked); 
    HighlightRowsOnChecked(SelectAllCheckBox, IdEndsWith); 
} 

jQuery的只有微小的,但由於某些原因發生以下邏輯:

  1. 頭複選框被選中 - 在表中的所有複選框成功地進行檢查和行是有色
  2. 然後取消選中標題複選框 - 所有複選框變爲未選中並且行着色清除
  3. 標題複選框被檢查 - 沒有迴應!

有人請幫助完善此代碼來消除這種奇怪的行爲?非常感謝。

當我的頭在旋轉時,我也會對此做出解釋!

回答

2

你應該在這種情況下使用.prop()代替.attr()

$(SelectAllCheckBox).closest('table') 
    .find("input[type='checkbox'][id*='" + IdEndsWith + "']") 
    .prop("checked", isChecked); 

屬性與屬性

屬性和性能之間的差異可以在特定情況下非常重要。在jQuery 1.6之前,.attr()方法在檢索某些屬性時有時會考慮屬性值,這可能會導致行爲不一致。從jQuery 1.6開始,.prop()方法提供了顯式檢索屬性值的方法,而.attr()檢索屬性。

參考:http://api.jquery.com/prop/

演示:http://jsfiddle.net/q9apt/3/

+0

就像一個魅力。非常感謝。 – EvilDr