Google 表单中的隐藏字段
Posted
技术标签:
【中文标题】Google 表单中的隐藏字段【英文标题】:Hidden field in a Google Form 【发布时间】:2013-12-19 00:14:56 【问题描述】:我正在为每次提交的表单添加一个唯一 ID。现在,我将该 ID 设置为第一个字段,并用 ID 预填充它,并附上一个帮助文本,要求用户不要修改此字段。是否有任何选项我无法向用户显示此选项?
【问题讨论】:
我知道表单的自定义脚本,只是想知道谷歌是否有任何直接支持。 你有没有想过如何做到这一点? 没有人..很久以前..我没有解决这个问题.. this one 部分重复了这个问题,StackExchange site for Web Applications 正在讨论这两个问题。 【参考方案1】:我也遇到过同样的问题,但似乎没有现成的解决方案。在 Google 决定支持隐藏字段之前,我们只能考虑其他不寻常的方法。
我带着其中一个来了。这是一个非最佳解决方案,但它有效。忍受我。
在每种形式中总是有一个具有唯一值的隐藏键。它自己的 ID。
如果您可以使用表单 ID 映射可跟踪值,那么您就成功了一半。
这是我的问题,这就是我所做的。
我需要将表单共享给一组用户。所有表单必须相同,并且允许用户将表单链接共享给其他人。我想跟踪推荐,因此可以为每个具有唯一 ID 的一级用户预填充和自定义的隐藏字段将是最佳的 FD。但这不起作用,所以我所做的是:
创建 Google 电子表格 在工作表中创建推荐代码列表 创建一个可用作模板的表单 以编程方式迭代推荐代码,并针对每一个代码: 在云端硬盘中复制模板表单并获取其表单 ID 在电子表格中创建一个新工作表并获取其 ID 将刚刚创建的表单与刚刚创建的工作表相关联,因此后者充当前者的存储区 获取表单 URL 并使用 URL、表单 ID 和表单 ID 更新推荐人的表单。通过这种方式,我拥有尽可能多的相同形式的“实例”,并单独分享给每个用户(如果您将电子邮件映射到推荐代码,这也可以通过编程方式完成)。
提交任何表单时,其链接的工作表都会更新。使用电子表格“提交表单”事件,我在 GAS 中运行了一个实用程序,它将所有值以及响应和表单的标识附加到用作摘要的特殊工作表中。这样,我只需要查看一张表格即可查看每个表格的所有结果并进行分析。
显然,如果对原始模板表单进行了更改,这将很难维护。但是,对我来说,它只是临时解决方案。
希望对你有帮助。
【讨论】:
这样可以创建多少个表单有限制吗? Google 配额将是您的限制。【参考方案2】:您可以做的最好的事情是转到右上角的设置并单击“收集电子邮件地址”,这不会收集它,但它有一个验证器并要求受访者填写一个电子邮件过滤的简短回答问题.
【讨论】:
【参考方案3】:您不能直接通过 Google 表单执行此操作,但您可以解决:
-
创建包含隐藏字段的 google 表单。
创建一个 Google Wep 应用 (https://developers.google.com/apps-script/guides/web)
将以下代码插入到默认的 Code.gs 文件中。 (这基本上打开了一个 index.html 模板。)
doGet(e)
return HtmlService.createTemplateFromFile('index').evaluate();
使用表单的源代码创建一个新的 index.html 文件。
通过将style="display:none"
添加到其封闭的<div>
来隐藏输入字段
使用<?= your_gscript_code() ?>
将任何模板信息插入<input value="">
字段
发布 Web 应用程序(发布/部署 Web 应用程序...),您就完成了。
现在您有一个指向表单的链接,该表单隐藏了所需的字段并预先填充了您的隐藏值。
使用此解决方案,您可以应用任何自定义样式,甚至可以摆脱其他不必要的 html 元素 同时保留由 Google 托管的表单。
【讨论】:
这简直太酷了,但我想随着时间的推移,这将不是一个稳定的解决方案。 嗨,我刚刚尝试了那个解决方案。当表单出现时,由于 CORS 政策,所有的 javascript 都被破坏了【参考方案4】:我想我已经找到了解决您问题的方法。表单数据将在表单提交时触发表单上的脚本。然后,您可以为提交的每一行复制并增加一个“范围”。
*编辑,请求示例代码。 为了使此代码正常工作,您需要使用 Google 应用脚本上的资源菜单“安装触发器”,并使用“来自电子表格”“提交表单”。 我已经将我正在做的事情归结为以下 sn-p。
function myFormUpdates(e)
var spreadsheet = SpreadsheetApp.getActive()
//select the sheet you're form is going to post data to
var sheet = spreadsheet.setActiveSheet(spreadsheet.getSheets()[1])
//select the last row and a unused column
var cell = sheet.getRange(sheet.getLastRow(), 3)
//set data
cell.setValue('Data')
【讨论】:
这对我有用,但我遇到了只能支持单个表单的问题。为了处理多种表单,我无法从传递的事件“e”中获取任何数据。如果有人对此有任何见解,我将不胜感激。 我实际上让它在同一个电子表格中处理多个工作表。 var sheet = spreadsheet.setActiveSheet(spreadsheet.getSheets()[e.range.getSheet().getIndex() - 1]) 上述行有效,但每次尝试调试时都会导致编辑器抛出错误。烦人但实用。Resource
菜单没有Install a trigger
。【参考方案5】:
我假设您只对在用户填写表单之前以编程方式分配唯一 ID 的方法感兴趣。
不,Google 表单仍然不直接支持隐藏字段,例如 HTML 表单中的隐藏字段。您唯一的选择似乎是您已经知道的 custom styling 路线。
这里有两个很有前途但行不通的想法......
预先填写已删除的问题。如果您从表单中删除问题,它仍会保留在响应电子表格中 - 不幸的是,表单会隐藏已删除问题的值填充的 URL,否则您可以通过这种方式将您的唯一 ID 欺骗到提交中。 (我认为这可能是一个聪明的解决方法,但对它不起作用感到失望。)
在跳过的页面上预填一个问题1。您可以在第二个页面上设置一个实时表单将跳过的问题,并且您还可以为该问题生成一个预先填写的 URL。到目前为止,一切都很好 - 但如果用户实际上并未导航到该页面,则不会提交预填充的响应。
1感谢@AdamL,他在旧论坛的previous discussion 上提出了这个想法。
【讨论】:
我也看到了同样的帖子.. 但那是 2010 年的帖子.. 我找不到最近的东西,我希望他们想出了一些解决方案... 预先填写的跳过页面似乎不再起作用,Google 表单不会保存该表单中的数据,即使它是必填字段。以上是关于Google 表单中的隐藏字段的主要内容,如果未能解决你的问题,请参考以下文章
javascript jQuery Google Analytics表单字段跟踪事件