从HTML组合框中拉取值并传递给函数

时间:2015-02-11 17:52:24

标签: html google-apps-script

我正在使用谷歌应用程序脚本在谷歌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文件的另一部分中使用文本框正常工作。组合框应该有什么不同吗?

1 个答案:

答案 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>