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

Google Form基于短答案的条件路径跳转问题及脚本修复求助

Google Form 手机号/邮箱验证跳转问题修复方案

问题描述

我需要创建一个Google Form,当用户输入的手机号或邮箱与关联Google Sheet中的数据匹配时,跳转到对应章节。目前已实现选择题(新用户/现有用户)的章节跳转,但短答案类型的手机号、邮箱验证跳转逻辑失效:输入无效信息点击「Next」后,仍会跳转到错误章节,而非指定分支。

原脚本关键错误修复

1. 变量未定义判断错误

原代码中if (validateEmail != undefined)的判断逻辑错误——validateEmail变量在此处还未声明,导致该判断永远为false,邮箱验证结果始终不会生效。需修改为判断输入的email是否非空:

// 邮箱验证逻辑修正
if (email != undefined && email !== ""){
  var validateEmail = checkEmail(email, emailColumnName)
}
else{
  var validateEmail = false;
}

// 手机号验证也需补充非空判断
if (phoneNumber != undefined && phoneNumber !== ""){
  var validatePhone = checkPhoneNumber(phoneNumber, phoneColumnName);
}
else {
  var validatePhone = false;
}

2. 当前响应获取逻辑错误

原代码通过form.getResponses()取最后一条响应,容易获取到其他用户的提交记录。应直接使用表单提交触发事件e中的当前用户响应:

// 替换原响应获取逻辑
var lastResponse = e.response;
var itemResponses = lastResponse.getItemResponses();

3. 缺失表格URL定义

脚本中直接使用sheetURL变量但未声明,需在脚本开头添加:

// 替换为你的关联Google Sheet URL
var sheetURL = "https://docs.google.com/spreadsheets/d/你的表格ID/edit";

4. 邮箱匹配大小写问题

邮箱不区分大小写,需统一转为小写后匹配:

// checkEmail函数内的匹配逻辑修改
var lowerEmail = email.toLowerCase();
if (row[columnNumber].toLowerCase() === lowerEmail){
  return true;
}

5. 章节跳转逻辑错误

原jumpToSection函数通过创建新响应提交来跳转,会生成冗余提交记录且无法控制当前用户的页面跳转。需改为直接构造章节跳转URL:

function jumpToSection(sectionID) {
  var form = FormApp.getActiveForm();
  var sectionItem = form.getItemById(sectionID);
  if (!sectionItem) {
    console.log("未找到指定章节ID");
    return;
  }
  // 构造跳转到指定章节的URL
  var formUrl = form.getPublishedUrl();
  var sectionUrl = formUrl + "#page=" + sectionItem.getIndex();
  // 设置提交后的跳转目标
  form.setDestination(FormApp.DestinationType.URL, sectionUrl);
}

更简便的实现方案

利用Google Form的逻辑分支+隐藏选择题,结合脚本自动填充验证结果,实现无冗余提交的跳转:

1. 表单结构调整

  • 页面1:选择题「你是新用户还是现有用户?」(选项:新用户、现有用户)
  • 页面2(现有用户专属):手机号、邮箱短答案框 + 隐藏选择题(选项:验证通过、验证失败),设置该选择题的逻辑跳转:「验证通过」跳转到现有用户章节,「验证失败」跳转到注册章节
  • 页面3:现有用户专属章节
  • 页面4:新用户/注册章节

2. 完整修正脚本

// 替换为你的关联Google Sheet URL
var sheetURL = "https://docs.google.com/spreadsheets/d/你的表格ID/edit";

// 表单提交触发函数(需设置为On Form Submit触发器)
function validateUser(e) {
  var response = e.response;
  var itemResponses = response.getItemResponses();
  var existingUserChoice = itemResponses[0].getResponse();

  // 新用户直接跳转注册章节
  if (existingUserChoice !== "Existing user") {
    redirectToSection(1189173207);
    return;
  }

  var phone = itemResponses[1].getResponse() || "";
  var email = itemResponses[2].getResponse() || "";
  var isValid = false;

  // 验证手机号或邮箱
  if (phone) isValid = checkPhone(phone);
  if (!isValid && email) isValid = checkEmail(email);

  // 替换为你的隐藏选择题ID
  var validationItemId = 123456789; 
  var validationItem = FormApp.getActiveForm().getItemById(validationItemId).asMultipleChoiceItem();
  var choice = isValid ? "验证通过" : "验证失败";

  // 自动填充验证结果
  var editResponse = response.withItemResponse(validationItem.createResponse(choice));
  editResponse.submit();

  // 跳转对应章节
  redirectToSection(isValid ? 470515527 : 1348206646);
}

function checkPhone(phone) {
  var sheet = SpreadsheetApp.openByUrl(sheetURL).getSheetByName("Form1");
  var data = sheet.getDataRange().getValues();
  var phoneColIndex = data[0].indexOf("Phone number");
  if (phoneColIndex === -1) return false;

  for (var i = 1; i < data.length; i++) {
    if (data[i][phoneColIndex] === phone) return true;
  }
  return false;
}

function checkEmail(email) {
  var sheet = SpreadsheetApp.openByUrl(sheetURL).getSheetByName("Form1");
  var data = sheet.getDataRange().getValues();
  var emailColIndex = data[0].indexOf("Email");
  if (emailColIndex === -1) return false;

  var lowerEmail = email.toLowerCase();
  for (var i = 1; i < data.length; i++) {
    if (data[i][emailColIndex].toLowerCase() === lowerEmail) return true;
  }
  return false;
}

function redirectToSection(sectionId) {
  var form = FormApp.getActiveForm();
  var sectionItem = form.getItemById(sectionId);
  if (!sectionItem) {
    console.log("章节ID无效");
    return;
  }
  var pageIndex = sectionItem.getIndex();
  var formUrl = form.getPublishedUrl();
  var redirectUrl = formUrl + "#page=" + pageIndex;
  form.setDestination(FormApp.DestinationType.URL, redirectUrl);
}

3. 触发器设置

在Google Apps Script编辑器中:

  1. 点击左侧「触发器」图标
  2. 添加新触发器:选择validateUser函数,事件类型为「表单提交」,部署版本选择「Head」

内容的提问来源于stack exchange,提问作者Paul Nguyen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 17:55:01