jQuery - 任意 2 个复选框必须从多个复选框中选中
jQuery - Any 2 Checkboxes are mandatorily checked from many
我有 5 个复选框和 5 个 divs...在取消选中每个复选框时我隐藏了相关的 div.
但是,如果计数小于 2,我如何 停止 取消选中复选框并显示 警告消息 <div class="warning">blablabla</div>
?
请帮帮我。
Fiddle is Here
HTML:
<div class="show-hide-items">
<span class="li-1">Item 1</span>
<span class="li-2">Item 2</span>
<span class="li-3">Item 3</span>
<span class="li-4">Item 4</span>
<span class="li-5">Item 5</span>
</div>
<div class="warning">Atleast <b>2</b> items are mandatory</div>
<label><input type="checkbox" value="one" checked /> Hide Item 1</label>
<label><input type="checkbox" value="two" checked /> Hide Item 2</label>
<label><input type="checkbox" value="three" checked /> Hide Item 3</label>
<label><input type="checkbox" value="four" checked /> Hide Item 4</label>
<label><input type="checkbox" value="five" checked /> Hide Item 5</label>
jQuery:
$(document).ready(function(){
$('input[type="checkbox"]').click(function(){
if($(this).attr("value")=="one"){$(".li-1").toggle();}
if($(this).attr("value")=="two"){$(".li-2").toggle();}
if($(this).attr("value")=="three"){$(".li-3").toggle();}
if($(this).attr("value")=="four"){$(".li-4").toggle();}
if($(this).attr("value")=="five"){$(".li-5").toggle();}
});
});
CSS:
body{font-family:arial;font-size:13px;}
.show-hide-items{margin-bottom:40px;}
span{display:block;background:#ccc;margin-bottom:5px;padding:10px;}
label{display:block;margin-bottom:5px;}
.warning{display:none;background-color:#f2dede;border:1px solid #ebccd1;color:#a94442;padding:10px;text-align:center;margin-bottom:5px;}
您可以使用:
$('input[type="checkbox"]:checked').length
有了它,您可以确定选中了多少个复选框。
例如:
$(document).ready(function(){
$('input[type="checkbox"]').click(function(){
if($(this).hasClass('disabled')) {
return false;
}
if($(this).attr("value")=="one"){$(".li-1").toggle();}
if($(this).attr("value")=="two"){$(".li-2").toggle();}
if($(this).attr("value")=="three"){$(".li-3").toggle();}
if($(this).attr("value")=="four"){$(".li-4").toggle();}
if($(this).attr("value")=="five"){$(".li-5").toggle();}
var checked = $('input[type="checkbox"]:checked');
if(checked.length == 2) {
$('.warning').show();
checked.addClass('disabled')
}else if (checked.length > 2) {
checked.removeClass('disabled');
}
});
});
更新:检查更新后的代码。
基本上我正在做的是向剩余的复选框添加一个 class(disabled) 并且在 onclick 处理程序的开头我正在检查单击的复选框是否具有禁用 class 以及是否具有我正在逃避默认行为。
建议:尽量不要滥用 jquery 构造函数。而是尝试使用可重用的变量。例如代替:
$(this).attr('value');
...
$(this).someMethod();
使用这样的东西:
var $this = $(this)
$this.attr('value');
...
$this.someMethod();
这样你就不会一遍又一遍地重建同一个变量。还有每次你做
$('some selector');
它将查看 dom,这是一项昂贵的操作。
你可以用计数器变量来维护同样的事情。
var ctr = 5;
$(document).ready(function(){
$('input[type="checkbox"]').click(function(){
if(ctr <= 2){
$(".warning").css("display","block");
}
if($(this).attr("value")=="one"){$(".li-1").toggle();}
if($(this).attr("value")=="two"){$(".li-2").toggle();}
if($(this).attr("value")=="three"){$(".li-3").toggle();}
if($(this).attr("value")=="four"){$(".li-4").toggle();}
if($(this).attr("value")=="five"){$(".li-5").toggle();}
ctr--;
});
});
如果计数小于或等于 2,则 div 可见。
试试这个
$(document).ready(function(){
var click = 0;
$('input[type="checkbox"]').click(function(){
if(click < 3){
if($(this).attr("value")=="one"){$(".li-1").toggle();}
if($(this).attr("value")=="two"){$(".li-2").toggle();}
if($(this).attr("value")=="three"){$(".li-3").toggle();}
if($(this).attr("value")=="four"){$(".li-4").toggle();}
if($(this).attr("value")=="five"){$(".li-5").toggle();}
}else{
$(".warning").show();
}
click++;
});
});
好的 那你可以试试这个
$(document).ready(function(){
$('input[type="checkbox"]').click(function(){
if($('input[type="checkbox"]:checked').length > 2){
if($(this).attr("value")=="one"){$(".li-1").toggle();}
if($(this).attr("value")=="two"){$(".li-2").toggle();}
if($(this).attr("value")=="three"){$(".li-3").toggle();}
if($(this).attr("value")=="four"){$(".li-4").toggle();}
if($(this).attr("value")=="five"){$(".li-5").toggle();}
}else{
$(".warning").show();
}
});
});
这可以用更少的代码实现
添加一个class到跨度项目,它与相关复选框的值同名。
<span class="one someOtehrClass">Item 1</span>
然后,更改点击事件
$('input[type="checkbox"]').click(function(){
if($('input:checked').length <=2){
$('.warning').show();
return false;
}
$('.warning').hide();
var item = $(this).val();
$('span.'+item).toggle();
});
参见Fiddle。
(注意:JFI 复选框的文本显示 'Hide' 但是选中时显示该项目,取消选中时隐藏该项目,可能需要更改文本或初始状态复选框。)
我有 5 个复选框和 5 个 divs...在取消选中每个复选框时我隐藏了相关的 div.
但是,如果计数小于 2,我如何 停止 取消选中复选框并显示 警告消息 <div class="warning">blablabla</div>
?
请帮帮我。
Fiddle is Here
HTML:
<div class="show-hide-items">
<span class="li-1">Item 1</span>
<span class="li-2">Item 2</span>
<span class="li-3">Item 3</span>
<span class="li-4">Item 4</span>
<span class="li-5">Item 5</span>
</div>
<div class="warning">Atleast <b>2</b> items are mandatory</div>
<label><input type="checkbox" value="one" checked /> Hide Item 1</label>
<label><input type="checkbox" value="two" checked /> Hide Item 2</label>
<label><input type="checkbox" value="three" checked /> Hide Item 3</label>
<label><input type="checkbox" value="four" checked /> Hide Item 4</label>
<label><input type="checkbox" value="five" checked /> Hide Item 5</label>
jQuery:
$(document).ready(function(){
$('input[type="checkbox"]').click(function(){
if($(this).attr("value")=="one"){$(".li-1").toggle();}
if($(this).attr("value")=="two"){$(".li-2").toggle();}
if($(this).attr("value")=="three"){$(".li-3").toggle();}
if($(this).attr("value")=="four"){$(".li-4").toggle();}
if($(this).attr("value")=="five"){$(".li-5").toggle();}
});
});
CSS:
body{font-family:arial;font-size:13px;}
.show-hide-items{margin-bottom:40px;}
span{display:block;background:#ccc;margin-bottom:5px;padding:10px;}
label{display:block;margin-bottom:5px;}
.warning{display:none;background-color:#f2dede;border:1px solid #ebccd1;color:#a94442;padding:10px;text-align:center;margin-bottom:5px;}
您可以使用:
$('input[type="checkbox"]:checked').length
有了它,您可以确定选中了多少个复选框。
例如:
$(document).ready(function(){
$('input[type="checkbox"]').click(function(){
if($(this).hasClass('disabled')) {
return false;
}
if($(this).attr("value")=="one"){$(".li-1").toggle();}
if($(this).attr("value")=="two"){$(".li-2").toggle();}
if($(this).attr("value")=="three"){$(".li-3").toggle();}
if($(this).attr("value")=="four"){$(".li-4").toggle();}
if($(this).attr("value")=="five"){$(".li-5").toggle();}
var checked = $('input[type="checkbox"]:checked');
if(checked.length == 2) {
$('.warning').show();
checked.addClass('disabled')
}else if (checked.length > 2) {
checked.removeClass('disabled');
}
});
});
更新:检查更新后的代码。 基本上我正在做的是向剩余的复选框添加一个 class(disabled) 并且在 onclick 处理程序的开头我正在检查单击的复选框是否具有禁用 class 以及是否具有我正在逃避默认行为。
建议:尽量不要滥用 jquery 构造函数。而是尝试使用可重用的变量。例如代替:
$(this).attr('value');
...
$(this).someMethod();
使用这样的东西:
var $this = $(this)
$this.attr('value');
...
$this.someMethod();
这样你就不会一遍又一遍地重建同一个变量。还有每次你做
$('some selector');
它将查看 dom,这是一项昂贵的操作。
你可以用计数器变量来维护同样的事情。
var ctr = 5;
$(document).ready(function(){
$('input[type="checkbox"]').click(function(){
if(ctr <= 2){
$(".warning").css("display","block");
}
if($(this).attr("value")=="one"){$(".li-1").toggle();}
if($(this).attr("value")=="two"){$(".li-2").toggle();}
if($(this).attr("value")=="three"){$(".li-3").toggle();}
if($(this).attr("value")=="four"){$(".li-4").toggle();}
if($(this).attr("value")=="five"){$(".li-5").toggle();}
ctr--;
});
});
如果计数小于或等于 2,则 div 可见。
试试这个
$(document).ready(function(){
var click = 0;
$('input[type="checkbox"]').click(function(){
if(click < 3){
if($(this).attr("value")=="one"){$(".li-1").toggle();}
if($(this).attr("value")=="two"){$(".li-2").toggle();}
if($(this).attr("value")=="three"){$(".li-3").toggle();}
if($(this).attr("value")=="four"){$(".li-4").toggle();}
if($(this).attr("value")=="five"){$(".li-5").toggle();}
}else{
$(".warning").show();
}
click++;
});
});
好的 那你可以试试这个
$(document).ready(function(){
$('input[type="checkbox"]').click(function(){
if($('input[type="checkbox"]:checked').length > 2){
if($(this).attr("value")=="one"){$(".li-1").toggle();}
if($(this).attr("value")=="two"){$(".li-2").toggle();}
if($(this).attr("value")=="three"){$(".li-3").toggle();}
if($(this).attr("value")=="four"){$(".li-4").toggle();}
if($(this).attr("value")=="five"){$(".li-5").toggle();}
}else{
$(".warning").show();
}
});
});
这可以用更少的代码实现
添加一个class到跨度项目,它与相关复选框的值同名。
<span class="one someOtehrClass">Item 1</span>
然后,更改点击事件
$('input[type="checkbox"]').click(function(){
if($('input:checked').length <=2){
$('.warning').show();
return false;
}
$('.warning').hide();
var item = $(this).val();
$('span.'+item).toggle();
});
参见Fiddle。
(注意:JFI 复选框的文本显示 'Hide' 但是选中时显示该项目,取消选中时隐藏该项目,可能需要更改文本或初始状态复选框。)