按ID获取HTML服务值

时间:2015-05-28 23:14:05

标签: google-apps-script

在示例代码中:

HTML(索引):

<form>
<br><br>
Name:
<br>
<input type="text" name="name">
<br><br>
Comments:
<br>
<input type="text" id="comments">
<br><br>
<input type="button" id="button" value="Submit Info" onclick="google.script.run
        .testFunction(this.form)">
</form>

代码:

function doGet() {//Creates the webpage
  return HtmlService.createTemplateFromFile('Index')//From the GUI file.
      .evaluate()
      .setSandboxMode(HtmlService.SandboxMode.IFRAME);
}

function testFunction(form){
  Logger.log(form.name);//Works when using the 'name' of the element.
  Logger.log(form.comments);//Does not work when using the 'ID'. 
}

为什么在添加HTML值的'Name'而不是'ID'时会返回一个值?如果我想通过ID获取值,我该怎么做呢?我试过了:

form.getElementById("comments");

但是这只是给我一个错误,说实话我在那之后没有想法。

注意:我完全可以使用'name'字段,就像我一直在做的那样,我只是好奇,因为我正在刷新我的HTML。

1 个答案:

答案 0 :(得分:1)

我相信Google在幕后所做的是将form解压缩为HTML表单并将其发送回服务器。 HTML表单使用name属性在发送回服务器时存储其所有名称值对。因此,如果这是此表单的获取请求:

<form>
  <input type="text" name="field1" value="value1"/>
  <input type="text" name="field2" value="value2"/>
</form>

它看起来像?field1=value1&field2=value2

所以在Code.gs的服务器端,你基本上把它作为一个对象(不是DOM对象,这就是你的form.getElementById("comments");无法工作的原因)。

无论哪种方式,带有<input>标记的标准都是使用name属性,因此您应该坚持使用它。如果您需要在客户端javascript中查找值,则应该只使用id属性。