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

如何在Google Apps Script中阻止表单提交?类似e.preventDefault()功能

解决Google表单提交时阻止未来日期数据写入的问题

首先得明确:Google Forms的onFormSubmit触发器是在表单数据已经写入响应表格之后才会触发的,所以并没有像前端DOM里e.preventDefault()那样直接拦截提交的方法。不过我们可以通过两种方式实现你的需求:

方案一:直接用表单内置的数据验证(最简单)

如果你的判断逻辑只是「比赛日期不能晚于今天」,完全不需要写脚本,直接在Google Form里设置:

  • 打开你的表单,找到日期输入的问题
  • 点击问题右下角的三个点,选择「数据验证」
  • 验证规则选择「日期」→「小于或等于」→「今天」
  • 自定义错误提示文本,比如「该比赛尚未发生,无法提交此记录」

这样用户在提交时如果选择未来日期,表单会直接在前端拦截,根本不会提交到表格里,效率最高。

方案二:用脚本删除提交后的无效行(适合复杂逻辑)

如果你的比赛日期判断需要动态逻辑(比如从其他数据源获取游戏日期,而不是固定和今天对比),可以通过脚本在提交后删除不符合条件的行。修改你的代码如下:

function onFormSubmit(e) {
  // 统一日期格式,避免时区和时间部分影响判断
  var todayDate = new Date();
  todayDate.setHours(0, 0, 0, 0);
  
  // 从提交数据中获取游戏日期(这里假设游戏日期是表单的第2列,索引从0开始为1,根据你的实际表单调整)
  var gameDateValue = e.values[1];
  var gameDate = new Date(gameDateValue);
  gameDate.setHours(0, 0, 0, 0);
  
  // 注意:你的需求是「比赛日期尚未到来(未来)则阻止写入」,所以判断条件是gameDate > todayDate
  if (gameDate > todayDate) {
    // 发送拒绝通知邮件
    var subject = "WFRA Online Game Keeping Submission";
    var message = "Hello! Thank you for submitting to the online game keeping system. \n";
    message += "\n Unfortunately, the submission was rejected because this game has not yet occurred:";
    // 从提交数据中获取Game Keeper(假设是表单第1列,索引0)
    message += "\n Game Keeper: " + e.values[0];
    message += "\n Game Date: " + gameDate.toLocaleDateString();
    message += "\n Submission Date: " + todayDate.toLocaleDateString();
    message += "\n Please reply to this email if you experience technical issues. \n";
    
    GmailApp.sendEmail(
      "wfringette@gmail.com", 
      subject, 
      message,
      {bcc: "thetroutlakemonster@gmail.com", replyTo: "webmaster@westferrisringette.ca"}
    );
    
    // 删除刚提交的无效行
    var responseSheet = e.range.getSheet();
    responseSheet.deleteRow(e.range.getRow());
    
    return;
  }
}

关键注意事项:

  1. 事件参数e的使用:必须通过e.values获取表单提交的数据,而不是直接用未定义的变量(比如你原来代码里的ogkGameDate)。e.values是一个数组,索引对应表单问题的顺序(从0开始),你需要根据自己的表单列顺序调整索引值。
  2. 时区处理:把日期的时、分、秒、毫秒都设为0,避免因为提交时间是下午而导致日期判断错误。
  3. 触发器设置:确保你已经在Google脚本编辑器里设置了「onFormSubmit」触发器:
    • 点击编辑器左侧的时钟图标(触发器)
    • 添加触发器,选择你的函数名,事件类型为「表单提交」

内容的提问来源于stack exchange,提问作者WFRA Website

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 06:22:30