如何使用jQuery在6x3复选框网格中最多选择7个复选框?

如何使用jQuery在6x3复选框网格中最多选择7个复选框?,jquery,checkbox,max,rows,Jquery,Checkbox,Max,Rows,我在弄清楚如何在6x3复选框网格中最多选择7个(或x个)复选框时遇到了一点困难,因为每行至少需要选中一个复选框。每一行都是一个具有唯一id的新html复选框标记 例如: Row1: [ ] - [x] - [ ] Row2: [x] - [ ] - [ ] Row3: [ ] - [x] - [ ] Row4: [ ] - [ ] - [x] Row5: [ ] - [ ] - [x] Row6: [x] - [ ] - [ ] 上面的示例显示了至少需要选中一

我在弄清楚如何在6x3复选框网格中最多选择7个(或x个)复选框时遇到了一点困难,因为每行至少需要选中一个复选框。每一行都是一个具有唯一id的新html复选框标记

例如:

Row1:   [ ] - [x] - [ ]

Row2:   [x] - [ ] - [ ]

Row3:   [ ] - [x] - [ ]

Row4:   [ ] - [ ] - [x]

Row5:   [ ] - [ ] - [x]

Row6:   [x] - [ ] - [ ]
上面的示例显示了至少需要选中一个复选框的六行。第七个复选框,用户可以在任何他想要的地方自由地检查。换句话说:每行最多可以检查2次,并且每行至少需要检查一个复选框

最终的解决方案是灵活的,编辑代码相当容易,因此也可以选中第8个或第9个复选框,甚至可以在一行中选中所有三个复选框

提前谢谢…这是一个棘手的问题,这一个:-)

演示:

演示:

演示:


演示:

此解决方案假定您的复选框是使用HTML表排列的。我知道很多人都是反表的,所以如果你使用的是无表布局,希望你能根据你的具体情况调整它

遵循的规则:

  • 每行必须至少选中一个框
  • 只有一行可以选中两个框
  • 任何行都不应选中两个赢家(在下面的更新中不强制执行)
Javascript:

$(function()
  {
      $('button').click(function()
          {
              var hedgeUsed = false;
              var validPicks = false;

              $('tr').each(function(){
                  if($(this).find(':checkbox:checked').length == 0)
                  {
                      alert('A selection must be made for each match');
                      validPicks = false;
                      return false;
                  }
                  else if($(this).find(':checkbox:checked').length >= 2)
                  {
                      if($(this).find(':checkbox:checked').length == 3 || ($(this).find(':checkbox').first().is(':checked') && $(this).find(':checkbox').last().is(':checked')))
                      {
                          alert('You may only select one winner per match');
                          validPicks = false;
                          return false;
                      }

                      if(hedgeUsed)
                      {
                          alert('You may only hedge one bet');
                          validPicks = false;
                          return false;
                      }
                      else
                      {
                          hedgeUsed = true;
                      }
                  }

                  validPicks = true;
              });

              if(validPicks)
              {
                  alert('submit the picks now');
                  // submit the picks
              }
          }
      );
  }
);

更新的Javascript(基于)


我没有在这方面花费太多时间,因此DOM遍历可能是最有效的,也可能不是最有效的,但它们都能工作。

此解决方案假设您的复选框是使用HTML表排列的。我知道很多人都是反表的,所以如果你使用的是无表布局,希望你能根据你的具体情况调整它

遵循的规则:

  • 每行必须至少选中一个框
  • 只有一行可以选中两个框
  • 任何行都不应选中两个赢家(在下面的更新中不强制执行)
Javascript:

$(function()
  {
      $('button').click(function()
          {
              var hedgeUsed = false;
              var validPicks = false;

              $('tr').each(function(){
                  if($(this).find(':checkbox:checked').length == 0)
                  {
                      alert('A selection must be made for each match');
                      validPicks = false;
                      return false;
                  }
                  else if($(this).find(':checkbox:checked').length >= 2)
                  {
                      if($(this).find(':checkbox:checked').length == 3 || ($(this).find(':checkbox').first().is(':checked') && $(this).find(':checkbox').last().is(':checked')))
                      {
                          alert('You may only select one winner per match');
                          validPicks = false;
                          return false;
                      }

                      if(hedgeUsed)
                      {
                          alert('You may only hedge one bet');
                          validPicks = false;
                          return false;
                      }
                      else
                      {
                          hedgeUsed = true;
                      }
                  }

                  validPicks = true;
              });

              if(validPicks)
              {
                  alert('submit the picks now');
                  // submit the picks
              }
          }
      );
  }
);

更新的Javascript(基于)


我没有在这方面花费太多时间,因此DOM遍历可能是最有效的,也可能不是最有效的,但它们都能工作。

此解决方案假设您的复选框是使用HTML表排列的。我知道很多人都是反表的,所以如果你使用的是无表布局,希望你能根据你的具体情况调整它

遵循的规则:

  • 每行必须至少选中一个框
  • 只有一行可以选中两个框
  • 任何行都不应选中两个赢家(在下面的更新中不强制执行)
Javascript:

$(function()
  {
      $('button').click(function()
          {
              var hedgeUsed = false;
              var validPicks = false;

              $('tr').each(function(){
                  if($(this).find(':checkbox:checked').length == 0)
                  {
                      alert('A selection must be made for each match');
                      validPicks = false;
                      return false;
                  }
                  else if($(this).find(':checkbox:checked').length >= 2)
                  {
                      if($(this).find(':checkbox:checked').length == 3 || ($(this).find(':checkbox').first().is(':checked') && $(this).find(':checkbox').last().is(':checked')))
                      {
                          alert('You may only select one winner per match');
                          validPicks = false;
                          return false;
                      }

                      if(hedgeUsed)
                      {
                          alert('You may only hedge one bet');
                          validPicks = false;
                          return false;
                      }
                      else
                      {
                          hedgeUsed = true;
                      }
                  }

                  validPicks = true;
              });

              if(validPicks)
              {
                  alert('submit the picks now');
                  // submit the picks
              }
          }
      );
  }
);

更新的Javascript(基于)


我没有在这方面花费太多时间,因此DOM遍历可能是最有效的,也可能不是最有效的,但它们都能工作。

此解决方案假设您的复选框是使用HTML表排列的。我知道很多人都是反表的,所以如果你使用的是无表布局,希望你能根据你的具体情况调整它

遵循的规则:

  • 每行必须至少选中一个框
  • 只有一行可以选中两个框
  • 任何行都不应选中两个赢家(在下面的更新中不强制执行)
Javascript:

$(function()
  {
      $('button').click(function()
          {
              var hedgeUsed = false;
              var validPicks = false;

              $('tr').each(function(){
                  if($(this).find(':checkbox:checked').length == 0)
                  {
                      alert('A selection must be made for each match');
                      validPicks = false;
                      return false;
                  }
                  else if($(this).find(':checkbox:checked').length >= 2)
                  {
                      if($(this).find(':checkbox:checked').length == 3 || ($(this).find(':checkbox').first().is(':checked') && $(this).find(':checkbox').last().is(':checked')))
                      {
                          alert('You may only select one winner per match');
                          validPicks = false;
                          return false;
                      }

                      if(hedgeUsed)
                      {
                          alert('You may only hedge one bet');
                          validPicks = false;
                          return false;
                      }
                      else
                      {
                          hedgeUsed = true;
                      }
                  }

                  validPicks = true;
              });

              if(validPicks)
              {
                  alert('submit the picks now');
                  // submit the picks
              }
          }
      );
  }
);

更新的Javascript(基于)



我没有在这方面花费太多时间,因此DOM遍历可能是最有效的,也可能不是最有效的,但它们确实有效。

你应该展示你所做的尝试,并描述它是如何失败的。这不是免费软件桌面。请说明你做了什么,并解释你被卡住的地方。我试过摆弄这个:-但这限制了每行x个复选框的数量。我搞不懂的是,当一行达到2个复选框时,如何将另一行“重置”为1个限制复选框检查…如果你知道我的意思,你的逻辑没有意义,也不明确。您说最多可以选中七个复选框,每行至少选中一个复选框。如果我选中第1行、第2行和第3行中的所有复选框,会发生什么?让我试着解释一下。它将用于预测体育比赛的结果。让我们假设国王和企鹅相遇。第一个复选框是国王队的胜利,第二个复选框是平局,第三个复选框是企鹅队的胜利。共有6个匹配项,因此每个匹配项都需要有一个结果。但是…在一个(或多个)匹配中,用户可以将两个结果作为优势。比如说,他在国王对企鹅的比赛中选中了第一个和第二个复选框,从而增加了他预测结果的机会。现在..如果他利用这个优势,他就不能在其他5场比赛中利用这个优势。希望这有意义?:)你应该展示你尝试过的东西,并描述它是如何失败的。这不是自由软件桌面。请说明你做了什么,并解释你被卡住的地方。我试过摆弄这个:-但这限制了每行x个复选框的数量。我搞不懂的是,当一行达到2个复选框时,如何将另一行“重置”为1个限制复选框检查…如果你知道我的意思,你的逻辑没有意义,也不明确。您说最多可以选中七个复选框,每行至少选中一个复选框。如果我选中第1行、第2行和第3行中的所有复选框,会发生什么?让我试着解释一下。它将用于预测体育比赛的结果。让我们假设国王和企鹅相遇。第一个复选框是国王队的胜利,第二个复选框是平局,第三个复选框是企鹅队的胜利。共有6个匹配项,因此每个匹配项都需要有一个结果。但是…在一个(或多个)匹配中,用户可以将两个结果作为优势。比如说,他在国王对企鹅的比赛中选中了第一个和第二个复选框,从而增加了他预测结果的机会。现在..如果他用那个adv