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

Pull value from HTML combo box and pass to a function

我正在使用 google 应用程序脚本在 google DOC 中创建一个自定义 ui。

UI 是 bui 和 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 文件的另一部分中正常工作。组合框应该有什么不同吗?

如果你想避免使用 script 标签,你可以将 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}

添加输入字段后,您将得到:

{=[Construction, test input]}

我认为您不能在 google.script.run.funcName() 中使用 document.getElementById('cboPhase').value 作为参数。它正在返回 NULL.

您传递的不是对象,而是值:

document.getElementById('cboPhase').value

如果您没有带有名为 buttonClicker() 的函数的 <script> 标签 在其中,然后 HTML 在提供给浏览器时会出错。

Uncaught ReferenceError: buttonClicker is not defined

所以,如果你想要一个 withSuccessHandler,你需要一个 <script> 标签。如果你要有一个<script>,你不妨把google.script.run放到脚本标签中而不是Input标签的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>