Javascript 循环的jquery复选框侦听器

Javascript 循环的jquery复选框侦听器,javascript,jquery,checkbox,Javascript,Jquery,Checkbox,解决方案 我有一个javascript文件: 我试图使bodyView创建的复选框具有click侦听器,但是现在我一次只能为一个复选框创建一个侦听器,有没有改进的方法 无论我选中还是取消选中,它都会做同样的事情(减少daysMissed) 以下是守则的相关部分: var bodyView = { init: function() { this.render(); }, render: function() { var student, i, x; v

解决方案

我有一个javascript文件:

我试图使bodyView创建的复选框具有click侦听器,但是现在我一次只能为一个复选框创建一个侦听器,有没有改进的方法

无论我选中还是取消选中,它都会做同样的事情(减少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(){
  $("input:checkbox").click(function() {
    octopus.setCurrentStudent(students[0]);
    if($(this).prop("checked",true)){
      octopus.incrementDaysMissed();
    } else {
      octopus.decreaseDaysMissed();
    }
  });
});

ID必须是唯一的。这意味着您需要更改以下行:

$('.'+i).append('<td id="check'+i+'" class="attend-col"><input type="checkbox"></td>');
选择每个td,每个td都有一个id检查开始,并为每个td选中子复选框

var模型={
学生:空,
学生日:12,
学生:[
{
名字:“打青蛙”,
日期:12
},
{
名称:“蜥蜴莉莉”,
日期:12
},
{
名称:“海象保卢斯”,
日期:12
},
{
名字:“山羊格雷戈里”,
日期:12
},
{
名字:“水蟒亚当”,
日期:12
}
]
};
//章鱼
八达通={
init:函数(){
model.currentStudent=model.students[0];
headerView.init();
bodyView.init();
},
getStudents:函数(){
回归模型;学生;
},
setCurrentStudent:函数(学生){
model.currentStudent=学生;
},
getSchoolDays:函数(){
返回model.schoolDays+1;
},
getDaysMissed:函数(){
返回model.currentStudent.daysMissed;
},
incrementDaysMissed:函数(){
model.currentStudent.daysMissed++;
},
decreaseDaysMissed:函数(){
model.currentStudent.daysMissed--;
}
};
//看法
var headerView={
init:函数(){
这个。render();
},
渲染:函数(){
var i;
var schoolDays=octopus.getSchoolDays();
$('#header')。追加('学生姓名');
对于(i=1;i

大学出勤率

有没有办法通过第一个数字将复选框分开,比如我有复选框0*和复选框1*我想要一个if语句,它只在我单击复选框0*时发生,而不是单击复选框1*时发生,因为我有多个学生,每个复选框行都属于其中一个学生,我尝试将函数放入学生长度的for循环中,并使用
$('[id^=check'+i+']:checkbox')
,但它几乎无法正常工作。唯一的问题是,我将其设置为,当我单击复选框时,它会更新错过的天数,如果我单击两行上的复选框,它会记住上一行,例如,我在第1行中错过了12天,如果我单击第1行中的任何复选框,它将变为错过11天,但是如果我在另一行中单击复选框,该行中错过的天数将变为10天,而不是11天。我已经更新了github repo,如果您需要查看更改,我将使用它来确定已处理的日期,但是错误仍然存在,我不太明白为什么,我将使用我创建的函数编辑我的问题,以便在您需要设置当前学生之前有更好的格式。我想这就是要寻找的方向。。。
$('.'+i).append('<td id="check'+i+'" class="attend-col"><input type="checkbox"></td>');
$('.'+i).append('<td id="check'+ i + x +'" class="attend-col"><input type="checkbox"></td>');
                               ^^^^^^^^
$('[id^=check] :checkbox').on('change', function(e) {