如何使用Google Apps脚本处理表单?

时间:2014-09-20 11:33:45

标签: google-apps-script

当涉及到GAS时,我是一个完全的菜鸟,但我想将一个表单传递给本地JS函数(以验证数据),然后调用Google函数(将其添加到电子表格中)。 问题是:我甚至无法从表单中获取值!

我的代码目前是这样的:

的index.html:

<link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons.css">

<div>
  <form id="register" action="javascsript:void(0)" onsubmit="validateForm(this)">
    Email: <input type="text" name="email" placeholder="someone@example.com" /><br/>
    <p id="emailtext"></p><br/>
    Smartschool URL: <input type="text" name="url" /><br/>
    <p id="urltext"></p><br/>
    <input type="submit" value="Submit" />
  </form>
</div>

<?!= include('Javascript'); ?>

Javascript.html:

<script>
  function validateForm(form) {
      // THIS IS NEVER POPPING UP
      alert(form.email);
      return false;
  }
</script>

GoogleCode.gs:

function doGet(e) {
  return HtmlService.createTemplateFromFile('Page').evaluate();
}

function include(filename) {
  return HtmlService.createHtmlOutputFromFile(filename)
      .getContent();
}

1 个答案:

答案 0 :(得分:2)

我在JavaScript中添加了console.log语句,并查看了我的Google Chrome浏览器控制台中的日志,并显示表单对象已通过。

我添加了这一行:

console.log('form: ' + form);

到您的Javascript文件:

<script>
  function validateForm(form) {
    console.log('form: ' + form);
      // THIS IS NEVER POPPING UP
      alert(form.email);
      return false;
  }
</script>

浏览器控制台打印:

form: [domado object HTMLFormElement FORM]

因此,表单对象正在传递。您可以枚举Form对象中的所有属性,以查看其中的内容,并可以检索。

for (var thePropurtees in form) {
  console.log('thePropurtees: ' + thePropurtees);
};

您将获得Form对象中所有内容的真实长列表,并且您会注意到电子邮件不在列表中。列表中的内容是元素属性,结果是表单对象中的另一个对象。 表单对象中有元素对象。

如果我枚举表单元素:

for (var thePropurtees in form.elements) {
  console.log('thePropurtees: ' + thePropurtees);
};

我明白了:

  

thePropurtees:0
  thePropurtees:1
  thePropurtees:2
  thePropurtees:项目
  thePropurtees:电子邮件
  thePropurtees:url
  thePropurtees:namedItem

因此,您的email数据必须位于子对象中。

我能够通过以下方式从电子邮件输入字段中获取值:

console.log('the email value: ' + form.elements.email.value);

在获取值之前,您需要访问三个级别的对象。

1)表格对象
2)元素对象
3)输入对象(电子邮件)

您的提醒必须如下:

alert(form.elements.email.value);