在示例代码中:
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。
答案 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
属性。