嗨,我想创建一个Google表单,我可以收集学生数据,我想让我的学生只输入一个答案一次的方式
例如,我想在要求录取号码的问题中使用这种方法,录取号码是一个唯一的号码,不会重复。因此,如果学生输入了已经输入的录取号,我希望他们看到一条错误消息“该录取号已被使用”
发布于 2021-03-08 19:54:20
问题:
对于特定的表单项目,避免使用相同的值提交多个表单响应。
工作流程:
Admission number。
updateDataValidation.
onFormSubmit触发器可以在these steps之后手动安装,也可以通过执行以下代码示例中的函数createTrigger来安装programmatically。每次updateDataValidation触发时,它都应该执行以下操作:
Admission number项目以前的所有响应。您可以首先通过Form.getResponses()检索所有表单响应,然后通过检查项目的标题来查找与项目相关的响应(请参阅将在上一步中检索到的入场编号数组转换为可用于数据验证的正则表达式模式,该模式可能如下所示:^{number1}$|^{number2}$|^{number3}$....代码示例:
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.https://stackoverflow.com/questions/66467437
复制相似问题