我正在使用谷歌应用程序脚本在谷歌DOC中构建自定义UI。
UI是使用HTMl构建的。我试图将html组合框的值传递给服务器端函数。
我缺少什么来获取组合框的值并传递它?
html的
<form id="cboPhase">
<select id="cboPhase">
<option>Sales</option>
<option>Operation(Quote/ROM/BOM)</option>
<option>Design Engineering</option>
<option>Construction</option>
<option>System Performance</option>
<option>Maintenance</option>
</select>
<br>
<br>
<div>
<input type="submit" class="button redButton" value="Submit"
onclick="google.script.run
.withSuccessHandler(buttonClicker)
.phaseName(document.getElementById('cboPhase').value )">
</div>
</form>
.GS
function phaseName(formObject){
showAlert();
var cboName = formObject;
var sheetToWriteTo = ss.getSheetByName('Project');
var rowData = [docId,activeUser,cboName, new Date()];
docBody.appendParagraph(cboName);
sheetToWriteTo.appendRow(rowData);
Logger.log(cboName);
}
我知道正在调用服务器函数,因为showAlert函数正在运行。同样的document.getElementByID()
方法在html文件的另一部分中使用文本框正常工作。组合框应该有什么不同吗?
答案 0 :(得分:1)
如果您想避免使用脚本标记,可以将onsubmit
属性放入FORM标记中:
<form id="cboPhase" onsubmit="google.script.run
.phaseName(this)">
请注意“ this ”关键字作为参数。
从INPUT标记中删除onclick
属性:
<input type="submit" class="button redButton" value="Submit">
在您的情况下,表单中只有一个SELECT框。如果表单中有更多输入元素,则数组内部将有多个值。我在服务器中返回的是:(假设我选择了“构造”选项):
{=Construction}
添加输入字段后,您将获得:
{=[Construction, test input]}
我认为您不能将document.getElementById('cboPhase').value
用作google.script.run.funcName()
中的参数。它返回 NULL 。
你没有传递一个物体,你传递了一个值:
document.getElementById('cboPhase').value
如果您没有<script>
标记,其中包含名为buttonClicker()
的函数
在其中,HTML将在向浏览器提供时出错。
未捕获的ReferenceError:未定义buttonClicker
因此,如果您想要withSuccessHandler
,则需要<script>
标记。如果您要使用<script>
,您可以将google.script.run
放入脚本代码中,而不是输入代码的onClick属性。
<script>
function fncCallServerCode() {
var valueToPass = document.getElementById('cboPhase').value;
google.script.run
.withSuccessHandler(buttonClicker)
.phaseName(valueToPass);
};
function buttonClicker(argReturnValue) {
alert('The code ran: ' + argReturnValue);
}
</script>
您的输入需要如下所示:
<div>
<input type="submit" class="button redButton" value="Submit" onclick="fncCallServerCode()">
</div>