表单提交后,Google Apps脚本HTMLService显示确认页面

时间:2015-11-12 23:15:57

标签: forms post google-apps-script

我使用Google Apps脚本和HTMLService创建了一个网络应用表单。

这是一个单页表单,底部有一个提交按钮。

提交后,表单会验证输入表单的数据是否有效,如果有效,则会将表单数据记录到电子表格中。

到目前为止一切都有效。

我现在需要将用户发送到确认页面,确认页面需要能够传递参数(在确认页面上显示某些信息)。

main.gs:

function doGet(e) {

  var template = HtmlService.createTemplateFromFile('form');
  return template.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME);

}

function processFormSubmission(formData) {

  Logger.log('starting processPoRequest');
  Logger.log('po: ' + JSON.stringify(formData, null, 2));
  // code for appending data to sheet here

}

form.html:

<!DOCTYPE html>

<form id="form1" name="form1">

  <label for="info" id="info_label">Info</label>
  <input id="info" name="info" type="text">

  <input class="btn" id="button" onclick="onClickFunctions(document.getElementById('form1'))" type="submit" value="Submit">

</form> 

<script>

function onClickFunctions(formData) {

  console.log('starting onClickFunctions');

  var allDataValid = validateForm(formData);

  if (allDataValid === true) {

    google.script.run.withSuccessHandler().processFormSubmission(formData);

  }

}

function validateForm(form) {

  console.log('starting validateForm');

  var errors = 0;

  var element = document.getElementById('info');
  if (!form.info) { element.classList.add("validation_error"); errors++; if (errors === 1) element.focus(); }
  else element.classList.remove("validation_error");

  if (errors > 0) return false;
  else            return true;

}

</script>

confirmation.html的:

<!DOCTYPE html>

<?!= confirmationMessage ?>

我不知道要放入.withSuccessHandler()的内容,以便将用户带到确认页面。

我已经广泛搜索了这个并在Stack Overflow上找到了这些结果,并且每个人都提出了一个不同的解决方案,但它们中没有一个实际包含解决方案的完整工作代码:

使用doPost的可能解决方案:

Send form by email and track responses in spreadsheet

HtmlService doPost With Google Docs Form

HtmlService doPost

我搞砸了doPost,但我无法弄清楚如何调用它,我无法在HTMLService docs中找到任何官方文档。

使用href中的Web应用程序链接的可能解决方案:

href in HtmlService

如果我的按钮是一个看起来像按钮的链接,我不确定在点击链接时如何执行表单验证功能。

1 个答案:

答案 0 :(得分:0)

我做了两种不同的方式。

  1. 有一个显示的隐藏语句,表单被隐藏。
    1. 使用.withSuccessHandler(google.script.host.close()),但让processFormSubmission函数打开一个新的对话框。