使用JavaScript检查并控制选中复选框的数量
我正在验证一些复选框,希望用户能够仅选择4个(可能从7个中选择),并在选中当前框(如果已选中3个)时禁用其他复选框,或者在未选中当前框时启用所有选项。我真的不确定问题出在哪里。这是我第一次使用JavaScript使用JavaScript检查并控制选中复选框的数量,javascript,Javascript,我正在验证一些复选框,希望用户能够仅选择4个(可能从7个中选择),并在选中当前框(如果已选中3个)时禁用其他复选框,或者在未选中当前框时启用所有选项。我真的不确定问题出在哪里。这是我第一次使用JavaScript function verify_selected(selected_check_box_id) { var count = 0; var selected_check_boxes = new Array(); var check_boxes = new Arra
function verify_selected(selected_check_box_id) {
var count = 0;
var selected_check_boxes = new Array();
var check_boxes = new Array();
var inputs = document.getElementsByTagName("input");
for( var i in inputs ) {
if( inputs[i].type == "checkbox" ) check_boxes.push( inputs[i] );
}
// get current checkbox
for( var i in check_boxes ) if( check_boxes[i].id == selected_check_box_id ) var current_check_box = check_boxes[i];
var current_check_box_is_checked = current_check_box.checked;
// get all "checked"
for( var i in check_boxes ) {
if( check_boxes[i].checked ) {
selected_check_boxes.push( check_boxes[i] );
count += 1;
}
}
if( current_check_box_is_checked ) {
// checking
if( count < 4 ) {
current_check_box.checked = true;
// count = 4 - disabling
if( count == 4 ) {
for( var i in check_boxes ) {
if( !check_boxes[i].checked ) check_boxes[i].disabled = true;
}
}
}
else current_check_box.checked = false;
} else {
// unchecking
// count is < 4 -> enabling
for( var i in check_boxes ) {
check_boxes[i].disabled = false;
}
}
}
功能验证\u选中(选中\u复选框\u id){
var计数=0;
var selected_check_box=new Array();
var复选框=新数组();
var inputs=document.getElementsByTagName(“输入”);
用于(输入中的var i){
if(inputs[i].type==“checkbox”)复选框。push(inputs[i]);
}
//获取当前复选框
for(复选框中的变量i)if(复选框[i].id==所选的复选框[id)var current\u check\u box=复选框[i];
var current\u check\u box\u is\u checked=current\u check\u box.checked;
//全部“检查”
用于(复选框中的var i){
如果(复选框[i]。选中){
选中的复选框。按下(复选框[i]);
计数+=1;
}
}
如果(当前复选框已选中){
//检查
如果(计数<4){
当前复选框。选中=真;
//计数=4-禁用
如果(计数=4){
用于(复选框中的var i){
如果(!复选框[i]。选中)复选框[i]。禁用=真;
}
}
}
else current_check_box.checked=false;
}否则{
//取消勾选
//计数<4->正在启用
用于(复选框中的var i){
复选框[i].disabled=false;
}
}
}
欢迎任何帮助,
提前感谢。简单浏览一下,您的代码似乎太复杂,无法完成任务 我可以建议使用类似的方法吗?您可以使用psudeo选择器“”非常轻松地选择相关复选框。还有,看看这个
如果您不想使用库,我建议首先创建一个可以计算复选框数量的函数。然后创建一个可以禁用或启用所有未选中复选框的函数。最后,将两者结合起来,并注册一个函数,在复选框的单击事件中触发。正如
cofiem
所说,您的代码对于您想要实现的目标来说相当复杂;我建议将其分解为几个更小的函数,以重用代码并降低复杂性
首先,实现一个函数以获取页面上的所有复选框:
function getCheckboxes()
{
var inputs = document.getElementsByTagName("input");
var checkboxes = new Array();
for(var i=0;i<inputs.length;++i) {
if(inputs[i].type=="checkbox")
checkboxes.push(inputs[i]);
}
return checkboxes;
}
函数getcheckbox()
{
var inputs=document.getElementsByTagName(“输入”);
var复选框=新数组();
对于(var i=0;i来说,有两件事是错误的。让我们先给出一个好的版本
我还在以下网站上发布了一个演示:
在原始版本中,有一段代码如下所示:
if (count < 4) {
if (count == 4) {
if(计数<4){
如果(计数=4){
不会发生的。所以,这是正确的
正如您在另一个答案中看到的,我们将函数更改为去掉查找ID。而不是在某个单独的函数中计算ID(我假设您正在跟踪某个其他函数发生的“上次单击”),只需使用this修饰符将其传递到函数中即可
好的,最后但并非最不重要的一点,这在jQuery中是什么样子。希望这将有助于理解它是如何工作的以及为什么值得使用:
(见示例:)
选择的功能限制(e){
//得到你所有的复选框
var复选框=$(e.currentTarget).parent().children().filter('input:checkbox');
//选中复选框数,如果为4,我们将禁用
var disableCheckBoxes=(checkBoxes.filter(':checked')。长度==4);
//如果小于4,则启用复选框;如果小于4,则禁用复选框
复选框。筛选器(':not(:checked')。每个(函数(){
this.disabled=禁用复选框;
});
}
//文档准备就绪后,设置复选框以限制选择计数
//如果您有这些复选框所在的特定div,您应该
//将选择器(“输入:复选框”)更改为(“yourDiv输入:复选框”)
$(函数(){
$(“输入:复选框”)。单击(已选定);
});
关于这个版本,我要注意的另一点是,它在div中的一组复选框上工作,而您的版本会在整个页面上选中复选框。(这是有限的。我在这个愚蠢的东西的痛苦中检查了jQuery,但我想-为什么直接跳到库中,当我只是在乞求JavaScript时…而且,我找不到更全面的教程(尽管有很多信息)跳进图书馆并不是一个坏主意,我还推荐jquery。它不仅可以让你的生活变得更轻松,还可以让你找到各种你可以轻松完成的高级事情。唷。好吧,这太过分了。但你已经做到了。非常感谢你的帮助。
function verify_selected(checkbox) {
var checkboxes = getCheckboxes();
var count=0;
for(i=0;i<checkboxes.length;++i) {
if(checkboxes[i].checked)
count++;
}
if(count>=4)
setDisabled(true);
else
setDisabled(false);
}
<input type="checkbox" onClick="verify_selected(this);">
//Insert 7 of these..
function verify_selected(currentCheckbox) {
var count = 0;
var selected_check_boxes = []; // this will be fine...
var check_boxes [];
var inputs = document.getElementsByTagName("input");
for( var i in inputs ) {
if( inputs[i].type == "checkbox" ) check_boxes.push( inputs[i] );
}
// get all "checked"
for( var i in check_boxes ) {
if( check_boxes[i].checked ) {
count += 1;
}
}
if( currentCheckbox.checked && (count == 4)) {
for( var i in check_boxes )
if( !check_boxes[i].checked )
check_boxes[i].disabled = true;
} else {
for( var i in check_boxes )
check_boxes[i].disabled = false;
}
}
if (count < 4) {
if (count == 4) {
function limitSelected(e) {
// get all of your checkboxes
var checkBoxes = $(e.currentTarget).parent().children().filter('input:checkbox');
// get the number of checkboxes checked, if 4, we'll disable
var disableCheckBoxes = (checkBoxes.filter(':checked').length == 4);
// enable checkboxes if we have < 4, disable if 4
checkBoxes.filter(':not(:checked)').each(function() {
this.disabled = disableCheckBoxes;
});
}
// when the document is ready, setup checkboxes to limit selection count
// if you have a particular div in which these checkboxes reside, you should
// change the selector ("input:checkbox"), to ("#yourDiv input:checkbox")
$(function() {
$('input:checkbox').click(limitSelected);
});