如何在回调函数中判断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
相关产品推荐
相关产品推荐

