google-apps-script - 如何使用 javascript 选择谷歌电子表格中的所有复选框?

标签 google-apps-script checkbox

描述很简单:我有三个复选框,第三个复选框在选中时必须选中所有其他复选框(一旦取消选中,也必须取消选中它们)。所有这些都必须在网格中,我不能使用 html 或除 Google Apps 脚本之外的任何其他语言。

这对您来说可能是一项简单的任务,但我在使用 JavaScript 和英语方面遇到了很多困难。无论如何,这是代码:

function checkboxes() {
  var range = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = range.getSheetId();
  var myapp = UiApp.createApplication().setTitle('Title').setWidth(1000).setHeight(100);
  var mygrid = myapp.createGrid(3, 3).setCellPadding(5).setCellSpacing(5);

  //One
  mygrid.setWidget(0, 0, myapp.createLabel('One').setId('One'));
  mygrid.setWidget(0, 1, myapp.createCheckBox().setName('One'));

  //Two
  mygrid.setWidget(1, 0, myapp.createLabel('Two').setId('Two'));
  mygrid.setWidget(1, 1, myapp.createCheckBox().setName('Two'));

  var handler1 = myapp.createClientHandler().forTargets(myapp.getElementById('One')).setValue(true).forTargets(myapp.getElementById('Two')).setValue(true);

  //Last
  mygrid.setWidget(2, 0, myapp.createLabel('Last').setId('Last'));
  mygrid.setWidget(2, 1, myapp.createCheckBox().setName('Last').OnClickHandler(handler1));
  //...
}

最佳答案

上次我尝试无法将 ClientHandlers 验证与复选框一起使用。因此,您必须坚持使用速度较慢的服务器处理程序,因此您可能需要添加一点无限进度 gif,以便用户知道正在执行某些操作。

这是我使用的解决方案的示例:

function mygui() {
  var imgUrl = 'https://f0839004-a-62cb3a1a-s-sites.googlegroups.com/site/hgabreu/files/ajax-loader.gif';
  //I may remove this image from this url at any time. Host yours in a place you control

  var app = UiApp.createApplication().setTitle('CheckAll example');
  var panel = app.createVerticalPanel();

  var boxes = ['Example 1', 'Test', 'Last check'];
  var groupName = 'myCheckBoxes';

  var groupAll = groupName+','+boxes.length;
  var image = app.createImage(imgUrl).setId(groupName+',img').setVisible(false);
  var checkAll = app.createCheckBox("Check All").setId(groupAll).setName(groupAll).addValueChangeHandler(
    app.createServerHandler('checkAll_').addCallbackElement(panel)).addValueChangeHandler(
      app.createClientHandler().forEventSource().setVisible(false).forTargets(image).setVisible(true));

  panel.add(checkAll).add(image);
  for( var i in boxes )
    panel.add(app.createCheckBox(boxes[i]).setId(groupName+','+i));

  SpreadsheetApp.getActive().show(app.add(panel));
}

function checkAll_(e) {
  var app = UiApp.getActiveApplication();
  var p = e.parameter; //just shortening
  var checkState = p[p.source] == 'true';
  var parts = p.source.split(',');
  var groupName = parts[0];
  var size = +parts[1];
  for( var i = 0; i < size; ++i )
    app.getElementById(groupName+','+i).setValue(checkState);
  app.getElementById(groupName+',img').setVisible(false);
  app.getElementById(p.source).setVisible(true);
  return app;
}

关于google-apps-script - 如何使用 javascript 选择谷歌电子表格中的所有复选框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11466249/

相关文章:

javascript - 复选框 $.change 被自身触发并循环,因为它正在 $.change 内部被修改

javascript - 复选框和输入字段值

google-apps-script - 如何使用谷歌应用脚​​本向谷歌电子表格添加子菜单

javascript - 如何使用 javascript 动态插入 Google Web 应用程序 URL

google-apps-script - 使用应用程序脚本将表单中的 24 小时时间转换为 12 小时时间

php - 使用 foreach 从 MySQL 中检索数据

javascript - 是否可以在 Google Apps 脚本中迭代 ENUM?

google-apps-script - 如何在单元格文本中间创建超链接?

c# - 修改选中状态后,不会触发Checkedchanged事件的复选框事件处理程序

javascript - 使复选框像单选按钮一样可以取消选中