如何使用jQuery在6x3复选框网格中最多选择7个复选框?
我在弄清楚如何在6x3复选框网格中最多选择7个(或x个)复选框时遇到了一点困难,因为每行至少需要选中一个复选框。每一行都是一个具有唯一id的新html复选框标记 例如:如何使用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] - [ ] - [ ] 上面的示例显示了至少需要选中一
Row1: [ ] - [x] - [ ]
Row2: [x] - [ ] - [ ]
Row3: [ ] - [x] - [ ]
Row4: [ ] - [ ] - [x]
Row5: [ ] - [ ] - [x]
Row6: [x] - [ ] - [ ]
上面的示例显示了至少需要选中一个复选框的六行。第七个复选框,用户可以在任何他想要的地方自由地检查。换句话说:每行最多可以检查2次,并且每行至少需要检查一个复选框
最终的解决方案是灵活的,编辑代码相当容易,因此也可以选中第8个或第9个复选框,甚至可以在一行中选中所有三个复选框
提前谢谢…这是一个棘手的问题,这一个:-)
演示:
演示:
演示:
演示:此解决方案假定您的复选框是使用HTML表排列的。我知道很多人都是反表的,所以如果你使用的是无表布局,希望你能根据你的具体情况调整它 遵循的规则:
- 每行必须至少选中一个框
- 只有一行可以选中两个框
- 任何行都不应选中两个赢家(在下面的更新中不强制执行)
$(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表排列的。我知道很多人都是反表的,所以如果你使用的是无表布局,希望你能根据你的具体情况调整它 遵循的规则:
- 每行必须至少选中一个框
- 只有一行可以选中两个框
- 任何行都不应选中两个赢家(在下面的更新中不强制执行)
$(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表排列的。我知道很多人都是反表的,所以如果你使用的是无表布局,希望你能根据你的具体情况调整它 遵循的规则:
- 每行必须至少选中一个框
- 只有一行可以选中两个框
- 任何行都不应选中两个赢家(在下面的更新中不强制执行)
$(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表排列的。我知道很多人都是反表的,所以如果你使用的是无表布局,希望你能根据你的具体情况调整它 遵循的规则:
- 每行必须至少选中一个框
- 只有一行可以选中两个框
- 任何行都不应选中两个赢家(在下面的更新中不强制执行)
$(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