You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在回调函数中判断SelectionInput复选框是否被勾选?

如何判断回调函数中SelectionInput复选框项是否被勾选?

嘿,我来帮你搞定这个问题!你遇到的核心困惑其实是Google Apps Script里复选框回调的返回格式问题——单个复选框和多个复选框的返回值结构不一样,咱们一步步拆解:

首先看你的代码,你创建的是单个复选框,这种情况下:

  • 当复选框被勾选时,e.formInput.chkSaveAttachments会直接返回你设置的item值也就是chkSaveAttachmentsValue;
  • 如果复选框未被勾选,这个字段会是undefined,甚至不会出现在e.formInput对象里。

你之前尝试访问e.formInput.chkSaveAttachments.chkSaveAttachmentsValue会得到undefined,是因为e.formInput.chkSaveAttachments本身就是个字符串值,不是嵌套对象,自然没有这个属性啦。

那正确的判断方式应该是这样:

function saveCallback(e) {
  // 简单判断:检查返回值是否等于咱们设置的复选框value
  const isChecked = e.formInput.chkSaveAttachments === "chkSaveAttachmentsValue";
  Logger.log("复选框是否勾选:" + isChecked);

  // 更严谨的写法:先判断字段是否存在,再比较值(避免未勾选时报错)
  const isCheckedStrict = !!e.formInput.chkSaveAttachments && e.formInput.chkSaveAttachments === "chkSaveAttachmentsValue";
  Logger.log("严谨判断复选框是否勾选:" + isCheckedStrict);
}

如果之后你需要添加多个复选框选项,比如这样:

section.addWidget(CardService.newSelectionInput()
  .setType(CardService.SelectionInputType.CHECK_BOX)
  .setFieldName("multiChk")
  .addItem("保存附件", "saveAttach", true)
  .addItem("同步日志", "syncLog", false)
  .addItem("发送通知", "sendNotify", true));

这时候回调里e.formInput.multiChk会变成一个数组,包含所有被勾选的选项值(比如上面的例子会返回["saveAttach", "sendNotify"])。要判断某个选项是否勾选,用数组的includes方法就可以:

const isSaveAttachChecked = e.formInput.multiChk?.includes("saveAttach");

这样就能准确搞定不同场景下的复选框勾选判断啦!

内容的提问来源于stack exchange,提问作者Cameron McNair

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:35:09