首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Google表单中只允许一个答案

在Google表单中只允许一个答案
EN

Stack Overflow用户
提问于 2021-03-04 09:48:01
回答 1查看 83关注 0票数 1

嗨,我想创建一个Google表单,我可以收集学生数据,我想让我的学生只输入一个答案一次的方式

例如,我想在要求录取号码的问题中使用这种方法,录取号码是一个唯一的号码,不会重复。因此,如果学生输入了已经输入的录取号,我希望他们看到一条错误消息“该录取号已被使用”

EN

回答 1

Stack Overflow用户

发布于 2021-03-08 19:54:20

问题:

对于特定的表单项目,避免使用相同的值提交多个表单响应。

工作流程:

Set rules for your form.

  • This

  • 为了避免提交某些响应,您必须对应用程序项使用某种类型的数据验证,如Set rules for your form.

  • This中所示,每次提交表单响应时都应更新数据验证,因为在将来的响应中应禁止新提交的Admission number

  • 为了在每次提交表单时更新此验证,您可以使用应用程序脚本onFormSubmit()触发器,该触发器将在每次提交表单时触发一个函数。让我们调用此函数updateDataValidation.

  • The onFormSubmit触发器可以在these steps之后手动安装,也可以通过执行以下代码示例中的函数createTrigger来安装programmatically

每次updateDataValidation触发时,它都应该执行以下操作:

  • 查找您的Admission number项目以前的所有响应。您可以首先通过Form.getResponses()检索所有表单响应,然后通过检查项目的标题来查找与项目相关的响应(请参阅将在上一步中检索到的入场编号数组转换为可用于数据验证的正则表达式模式,该模式可能如下所示:^{number1}$|^{number2}$|^{number3}$....
  • Use TextValidation以便更新项目的验证规则。

代码示例:

代码语言:javascript
复制
function updateDataValidation(e) {
  const itemTitle = "Admission number"; // Name of the form item. Change accordingly
  const errorMessage = "The admission number has been already used.";
  const form = e ? e.source : FormApp.getActiveForm();
  const responses = form.getResponses();
  const admissionNumbers = responses.map(response => {
    return response.getItemResponses().find(itemResponse => {
      return itemTitle === itemResponse.getItem().getTitle();
    });
  }).map(itemResponse => itemResponse.getResponse());
  const numbersPattern = admissionNumbers.map(number => `^${number}\$`).join("|");
  const item = form.getItems().find(item => item.getTitle() === itemTitle);
  let validation = FormApp.createTextValidation()
                          .setHelpText(errorMessage)
                          .requireTextDoesNotMatchPattern(numbersPattern)
                          .build();
  item.asTextItem().setValidation(validation);
}

function createTrigger() {
  const form = FormApp.getActiveForm();
  ScriptApp.newTrigger('updateDataValidation')
    .forForm(form)
    .onFormSubmit()
    .create();
}

备注:

  • 在上面的代码示例中,项Admission number被假定为Admission number。如果不是这样,请在代码中进行更改。
  • 在上面的代码示例中,项Admission number被假定为文本项,如Short answer.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66467437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档