如何使用复选框来选中或取消选中所有框到handsontable

Posted

技术标签:

【中文标题】如何使用复选框来选中或取消选中所有框到handsontable【英文标题】:How to use checkbox to checkall or uncheck all boxes into handsontable 【发布时间】:2019-04-17 03:57:22 【问题描述】:

我想使用一个复选框来选中或取消选中所有框到可用的 col。我创建了一个带有 doalert 功能的复选框来控制选中的操作。我正在使用 setDataAtCell 编辑检查单元格,但它不起作用。

我的代码是:

document.addEventListener("DOMContentLoaded", function() 

  function getCarData() 
    return [
      car: "Mercedes A 160", year: 2012, available: true, comesInBlack: 'yes',
      car: "Citroen C4 Coupe", year: 2013, available: false, comesInBlack: 'yes',
      car: "Audi A4 Avant", year: 2014, available: true, comesInBlack: 'no',
      car: "Opel Astra", year: 2015, available: false, comesInBlack: 'yes',
      car: "BMW 320i Coupe", year: 2016, available: false, comesInBlack: 'no'
    ];
  
  
  var example1 = document.getElementById('example1'),
    hot1;
  
  hot1 = new Handsontable(example1, 
    data: getCarData(),
    colHeaders: ['Car model', 'Year of manufacture', 'Available'],
    columns: [
      
        data: 'car'
      ,
      
        data: 'year',
        type: 'numeric'
      ,
      
        data: 'available',
        type: 'checkbox'
      
    ]
  );

function doalert(checkboxElem) 
  if (checkboxElem.checked) 
 	var rows = hot1.countRows();
  for(var i = 0; i < rows; i++)
  	hot1.setDataAtCell(i, 2, true)
  
 
  else 
     	var rows = hot1.countRows();
  for(var i = 0; i < rows; i++)
  	hot1.setDataAtCell(i, 2, false)
  


);
</style><!-- Ugly Hack due to jsFiddle issue -->

<script src="http://docs.handsontable.com/pro/1.7.4/bower_components/handsontable-pro/dist/handsontable.full.min.js"></script>
<link type="text/css" rel="stylesheet" href="http://docs.handsontable.com/pro/1.7.4/bower_components/handsontable-pro/dist/handsontable.full.min.css"><style>
button 
  padding: 10px;
  margin: 10px 0;
<div id="example1" class="hot handsontable htColumnHeaders"></div>
   CheckAll/UncheckAll<input type="checkbox" name="checkfield" id="g01-01"  onchange="doalert(this)"/>

请帮忙。

【问题讨论】:

嗨,您是否尝试过答案中的任何建议?他们中的任何一个有帮助吗?如果是这样,请考虑接受对您有帮助(最大)的那个 【参考方案1】:

你可以这样做:

const example1 = document.getElementById('example1');
const hot1 = new Handsontable(example1, 
  data: getCarData(),
  colHeaders: ['Car model', 'Year of manufacture', 'Available'],
  columns: [data: 'car',data: 'year',type: 'numeric',data: 'available',type: 'checkbox']
);

function getCarData() 
  return [car: 'Mercedes A 160',year: 2012,available: true,comesInBlack: 'yes',car: 'Citroen C4 Coupe',year: 2013,available: false,comesInBlack: 'yes',car: 'Audi A4 Avant',year: 2014,available: true,comesInBlack: 'no',car: 'Opel Astra',year: 2015,available: false,comesInBlack: 'yes',car: 'BMW 320i Coupe',year: 2016,available: false,comesInBlack: 'no'];


function doalert(checkboxElem) 
  example1
    .querySelectorAll('input[type=checkbox]')
    .forEach(elem => elem.checked = checkboxElem.checked);
</style><!-- Ugly Hack due to jsFiddle issue --><script src="http://docs.handsontable.com/pro/1.7.4/bower_components/handsontable-pro/dist/handsontable.full.min.js"></script><link type="text/css" rel="stylesheet" href="http://docs.handsontable.com/pro/1.7.4/bower_components/handsontable-pro/dist/handsontable.full.min.css"><style>button 
  padding: 10px;
  margin: 10px 0;
<div id="example1" class="hot handsontable htColumnHeaders"></div>

<label for="g01-01">CheckAll/UncheckAll</label>
<input type="checkbox" name="checkfield" id="g01-01" onchange="doalert(this)" />

【讨论】:

【参考方案2】:

我使用你的不同方式来获得触发更改功能。

document.addEventListener("DOMContentLoaded", function() 

  function getCarData() 
    return [
      car: "Mercedes A 160", year: 2012, available: true, comesInBlack: 'yes',
      car: "Citroen C4 Coupe", year: 2013, available: false, comesInBlack: 'yes',
      car: "Audi A4 Avant", year: 2014, available: true, comesInBlack: 'no',
      car: "Opel Astra", year: 2015, available: false, comesInBlack: 'yes',
      car: "BMW 320i Coupe", year: 2016, available: false, comesInBlack: 'no'
    ];
  
  
  var example1 = document.getElementById('example1'),

  hot1 = new Handsontable(example1, 
    data: getCarData(),
    colHeaders: ['Car model', 'Year of manufacture', 'Available'],
    columns: [
      
        data: 'car'
      ,
      
        data: 'year',
        type: 'numeric'
      ,
      
        data: 'available',
        type: 'checkbox'
      
    ]
  );

$('input[name=checkfield]').click(function()
//function doalert(checkboxElem) 
  if ($(this).is(':checked')) 
 	    var rows = hot1.countRows();
      for(var i = 0; i < rows; i++)
  	    hot1.setDataAtCell(i, 2, true)
      
 
  else 
     	  var rows = hot1.countRows();
         for(var i = 0; i < rows; i++)
  	      hot1.setDataAtCell(i, 2, false)
       
  

)

 
);
</style><!-- Ugly Hack due to jsFiddle issue -->

<script src="http://docs.handsontable.com/pro/1.7.4/bower_components/handsontable-pro/dist/handsontable.full.min.js"></script>
<link type="text/css" rel="stylesheet" href="http://docs.handsontable.com/pro/1.7.4/bower_components/handsontable-pro/dist/handsontable.full.min.css"><style>
button 
  padding: 10px;
  margin: 10px 0;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="example1" class="hot handsontable htColumnHeaders"></div>
   CheckAll/UncheckAll<input type="checkbox" name="checkfield" id="g01-01"/>

【讨论】:

以上是关于如何使用复选框来选中或取消选中所有框到handsontable的主要内容,如果未能解决你的问题,请参考以下文章

使用 jquery 选中或取消选中 parent parents 复选框

通过使用 C# 选中其他复选框来取消选中复选框 [关闭]

如何使用 jQuery 使用按钮选中/取消选中所有复选框?

复选框值不能基于选中或使用jquery取消选中来更改[重复]

JavaScript 选中或取消选中所有复选框

如何使用 JavaScript 或 jquery 选中/取消选中复选框?