简体   繁体   English

Javascript:按类别名称选中所有复选框

[英]Javascript: Select all checkboxes by classname

I'm having an issue with the following code which selects all checkboxes in the row based on the 'Select All' button clicked. 我遇到了以下代码的问题,该代码根据单击的“全选”按钮选择行中的所有复选框。 The problem is I have to click each button twice if some checkboxes are already checked in order to change their state. 问题是,如果已经选中某些复选框以更改其状态,则我必须单击每个按钮两次。 I'd like to do this with just one click on each button no matter if checkboxes are selected or not. 无论是否选中复选框,我都希望在每个按钮上单击一下即可完成此操作。 Is there a simple way to do this? 有没有简单的方法可以做到这一点? Thank you! 谢谢!

jsFiddle jsFiddle

<form name="editview">    
    <input type="checkbox" id="edit_1" name="check1" class="edit">
    <input type="checkbox" id="edit_2" name="check2" class="edit" disabled="disabled" checked="checked">
    <input type="checkbox" id="edit_3" name="check3" class="edit" disabled="disabled">
    <input type="checkbox" id="edit_4" name="check4" class="edit">
    <input type="button" class="button" value="Select All" onclick="CheckUncheckAllAndExcludeDisabledByClass(this,'edit')" title="Select all: items.">
    <input type="checkbox" id="view_5" name="check5" class="view">
    <input type="checkbox" id="view_6" name="check6" class="view" disabled="disabled" checked="checked">
    <input type="checkbox" id="view_7" name="check7" class="view" disabled="disabled">
    <input type="checkbox" id="view_8" name="check8" class="view">
    <input type="button" class="button" value="Select All" onclick="CheckUncheckAllAndExcludeDisabledByClass(this,'view')" title="Select all: items.">
</form>

checked = true;

function CheckUncheckAllAndExcludeDisabledByClass(theElement,theCheckBoxClass) {
    var checks = document.querySelectorAll('.' + theCheckBoxClass);
    for (var i = 0; i < checks.length; i++) {
        var check = checks[i];
        if (!check.disabled) {
            check.checked = checked;
        }
    }
    checked = !checked;
}

You can use this demo to check uncheck of checkbox on single click, click on below link and check demo and integrate in your system. 您可以使用该演示单击一下以取消选中复选框,单击下面的链接并检查演示并集成到您的系统中。

HTML CODE: HTML代码:

<div id="divCheckAll">
<input type="checkbox" name="checkall" id="checkall" onClick="check_uncheck_checkbox(this.checked);" />Check All</div>
<div id="divCheckboxList">
    <div class="divCheckboxItem"><input type="checkbox" name="language" id="language1" value="English" />English</div>
    <div class="divCheckboxItem"><input type="checkbox" name="language" id="language2" value="French" />French</div>
    <div class="divCheckboxItem"><input type="checkbox" name="language" id="language3" value="German" />German</div>
    <div class="divCheckboxItem"><input type="checkbox" name="language" id="language4" value="Latin" />Latin</div>
</div>

Jquery Code jQuery代码

function check_uncheck_checkbox(isChecked) {
    if(isChecked) {
        $('input[name="language"]').each(function() { 
            this.checked = true; 
        });
    } else {
        $('input[name="language"]').each(function() {
            this.checked = false;
        });
    }
}

http://phppot.com/jquery/check-uncheck-all-checkbox-using-jquery/ http://phppot.com/jquery/check-uncheck-all-checkbox-using-jquery/

Thanks 谢谢

You need to store separate state for each checkbox type 您需要为每种复选框类型存储单独的状态

 checked = {}; function CheckUncheckAllAndExcludeDisabledByClass(theElement, theCheckBoxClass) { var checks = document.querySelectorAll('.' + theCheckBoxClass); var ckd = checked[theCheckBoxClass] === false ? false : true; for (var i = 0; i < checks.length; i++) { var check = checks[i]; if (!check.disabled) { check.checked = ckd; } } checked[theCheckBoxClass] = !ckd; } 
 <form name="editview"> <input type="checkbox" id="edit_1" name="check1" class="edit"> <input type="checkbox" id="edit_2" name="check2" class="edit" disabled="disabled" checked="checked"> <input type="checkbox" id="edit_3" name="check3" class="edit" disabled="disabled"> <input type="checkbox" id="edit_4" name="check4" class="edit"> <input type="button" class="button" value="Select All" onclick="CheckUncheckAllAndExcludeDisabledByClass(this,'edit')" title="Select all: items."> <input type="checkbox" id="view_5" name="check5" class="view"> <input type="checkbox" id="view_6" name="check6" class="view" disabled="disabled" checked="checked"> <input type="checkbox" id="view_7" name="check7" class="view" disabled="disabled"> <input type="checkbox" id="view_8" name="check8" class="view"> <input type="button" class="button" value="Select All" onclick="CheckUncheckAllAndExcludeDisabledByClass(this,'view')" title="Select all: items."> </form> 


But if you have jQuery then 但是如果你有jQuery,那么

 $('.select-all').click(function() { var $this = $(this), checked = !$this.data('checked'); $('.' + $this.data('class')).not(':disabled').prop('checked', checked); $this.data('checked', checked) }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <form name="editview"> <input type="checkbox" id="edit_1" name="check1" class="edit"> <input type="checkbox" id="edit_2" name="check2" class="edit" disabled="disabled" checked="checked"> <input type="checkbox" id="edit_3" name="check3" class="edit" disabled="disabled"> <input type="checkbox" id="edit_4" name="check4" class="edit"> <input type="button" class="button select-all" value="Select All" title="Select all: items." data-class="edit"> <input type="checkbox" id="view_5" name="check5" class="view"> <input type="checkbox" id="view_6" name="check6" class="view" disabled="disabled" checked="checked"> <input type="checkbox" id="view_7" name="check7" class="view" disabled="disabled"> <input type="checkbox" id="view_8" name="check8" class="view"> <input type="button" class="button select-all" value="Select All" title="Select all: items." data-class="view"> </form> 

You can do it like this : 您可以这样做:

HTML : HTML:

<div id="test">
    <input type="checkbox" id="check1" name="check1" class="check">
    <input type="checkbox" id="check01" name="check01" class="check" disabled="disabled" checked>
    <input type="checkbox" id="check2" name="check2" class="check" disabled="disabled">
    <input type="checkbox" id="check3" name="check3" class="check">
    <input type="checkbox" id="check4" name="check4" class="check">
    <input type="checkbox" id="check50" name="check50" class="check">
    <input type="checkbox" id="check6" name="check6" class="check">
</div>
<input type="button" id="uncheckAll" value="select all">

JS : JS:

$('#uncheckAll').click(function(){
    var checks = $('input[class="check"]');
    for(var i =0; i< checks.length;i++){
        var check = checks[i];
        if(!check.disabled){
            if (check.checked) {
            check.checked = false;
            }
        }
    }

    for(var i =0; i< checks.length;i++){
        var check = checks[i];
        if(!check.disabled){
            if (!check.checked) {
            check.checked = true;
            }
        }
    }
});

Here is the working Fiddle 这是工作中的小提琴

Do let me know if it is according to your requirement. 让我知道是否符合您的要求。

Happy Coding. 编码愉快。

Try adjusting checked variable to utilize Array.prototype.filter to select elements not disabled , Array.prototype.every to toggle element checked attribute 尝试调整checked变量以利用Array.prototype.filter选择未禁用的元素, Array.prototype.every切换元素checked属性

 function CheckUncheckAllAndExcludeDisabledByClass(theElement, theCheckBoxClass) { var checks = document.querySelectorAll('.' + theCheckBoxClass); var checked = Array.prototype.filter.call(checks, function(el) { return !el.disabled }).every(function(el) { return el.checked }); for (var i = 0; i < checks.length; i++) { var check = checks[i]; if (!check.disabled) { check.checked = !checked ? true : false; } } } 
 <form name="editview"> <input type="checkbox" id="edit_1" name="check1" class="edit"> <input type="checkbox" id="edit_2" name="check2" class="edit" disabled="disabled" checked="checked"> <input type="checkbox" id="edit_3" name="check3" class="edit" disabled="disabled"> <input type="checkbox" id="edit_4" name="check4" class="edit"> <input type="button" class="button" value="Select All" onclick="CheckUncheckAllAndExcludeDisabledByClass(this,'edit')" title="Select all: items."> <input type="checkbox" id="view_5" name="check5" class="view"> <input type="checkbox" id="view_6" name="check6" class="view" disabled="disabled" checked="checked"> <input type="checkbox" id="view_7" name="check7" class="view" disabled="disabled"> <input type="checkbox" id="view_8" name="check8" class="view"> <input type="button" class="button" value="Select All" onclick="CheckUncheckAllAndExcludeDisabledByClass(this,'view')" title="Select all: items."> </form> 

Problem is you are using same flag for multiple class names: 问题是您对多个类名使用相同的标志:

Plain Js solution: 纯Js解决方案:

 var state = {}; var toggle = function(clas) { var chk = state[clas] = !state[clas];//flips the state (true/false) var chks = document.getElementsByClassName(clas); var l = chks.length; while (l--) if (!chks[l].disabled) chks[l].checked = chk; }; 
 <form name="editview"> <input type="checkbox" id="edit_1" name="check1" class="edit"> <input type="checkbox" id="edit_2" name="check2" class="edit" disabled="disabled" checked="checked"> <input type="checkbox" id="edit_3" name="check3" class="edit" disabled="disabled"> <input type="checkbox" id="edit_4" name="check4" class="edit"> <input type="button" class="button" value="Select All" onclick="toggle('edit')" title="Select all: items."> <input type="checkbox" id="view_5" name="check5" class="view"> <input type="checkbox" id="view_6" name="check6" class="view" disabled="disabled" checked="checked"> <input type="checkbox" id="view_7" name="check7" class="view" disabled="disabled"> <input type="checkbox" id="view_8" name="check8" class="view"> <input type="button" class="button" value="Select All" onclick="toggle('view')" title="Select all: items."> </form> 

HTML 的HTML

<div id="divCheckAll">
   <input type="checkbox" name="check" id="checkall" 
          onClick="check(this.checked);" />Check All
</div>
<div id="divCheckboxList">
   <div class="divCheckboxItem">
      <input type="checkbox" name="language" value="English" />English
   </div>
   <div class="divCheckboxItem">
      <input type="checkbox" name="language"  value="Hindi" />Hindi
   </div>
   <div class="divCheckboxItem">
      <input type="checkbox" name="language"  value="German" />German
   </div>
   <div class="divCheckboxItem">
      <input type="checkbox" name="language"  value="Marathi" />Marathi
   </div>
</div>

Java Script Java脚本

function check(isChecked) {
   if(isChecked) {
      $('input[name="language"]').each(function() { 
         this.checked = true; 
       });
   } else {
       $('input[name="language"]').each(function() {
          this.checked = false;
       });
   }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM