SOLUTIONjQuery的複選框,偵聽環
https://github.com/Campos696/Attendance/commit/28177ff5cf285e9616faddae74fa6f0288a8667a
我有這個JavaScript文件:
https://github.com/Campos696/Attendance/blob/master/js/app.js
,我試圖讓這個由bodyView創建的複選框,有點擊監聽器,但是現在我只能一次爲一個複選框創建一個監聽器,有什麼方法可以改進它嗎?
而無論我檢查或取消選中它是否做同樣的事情(減少daysMissed)。
這裏是代碼的相關部分:
var bodyView = {
init: function() {
this.render();
},
render: function() {
var student, i, x;
var schoolDays = octopus.getSchoolDays();
var students = octopus.getStudents();
for(i = 0;i < students.length; i++) {
octopus.setCurrentStudent(students[i]);
var daysMissed = octopus.getDaysMissed();
$('#students').append('<tr class="'+i+'"><td class="name-col">' + students[i].name + '</td></tr>');
for(x = 1;x < schoolDays; x++) {
$('.'+i).append('<td id="check'+i+'" class="attend-col"><input type="checkbox"></td>');
};
$('.'+i).append('<td class="missed-col">'+ daysMissed + '</td>');
};
$(function(){
$('#check0').click(function() {
octopus.setCurrentStudent(students[0]);
if($(this).is(':checked')){
octopus.incrementDaysMissed();
} else if(!$(this).is(':checked')){
octopus.decreaseDaysMissed();
}
})
})
}
}
功能編輯
$(function(){
$('[id^=check] :checkbox').on('change', function(e) {
var daysMissed = $(this).closest('tr').find('td:last');
if (this.checked) {
octopus.decreaseDaysMissed();
daysMissed.html(octopus.getDaysMissed());
} else {
octopus.incrementDaysMissed();
daysMissed.html(octopus.getDaysMissed());
}
})
})
有什麼辦法通過他們的第一個號碼的複選框分開,說我有check0 *框和CHECK1 *箱子,我想if語句,當我點擊只會發生check0 *框但不是check1 *框,因爲我有多個學生,每個複選框行都屬於其中的一個,我試着將函數放在for循環中以便學生長度,並使用'$('[id^= check '+ i +']:複選框')'但它沒有工作 –
它的工作主要完美唯一的問題是,我設置它,所以當我點擊複選框它更新天錯過了,如果我點擊兩個不同的行上的複選框我例如,如果我點擊第1行中的任何複選框,它會丟失11天,但是如果我然後單擊另一行上的複選框,那麼在該行中錯過的日期將下降到第1行中的12天10而不是11.我已經更新了github回購,如果你需要看到的變化 –
我用它來確定daysMissed,但錯誤仍然存在,我不明白爲什麼,我會用我創建的函數編輯我的問題爲了有更好的格式 –