2015-02-11 56 views
1

我正在使用谷歌应用程序脚本在谷歌DOC中构建自定义UI。从HTML组合框中提取值并传递给函数

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

如果你想避免使用script标签,你可以把一个onsubmit属性到窗体标签:

<form id="cboPhase" onsubmit="google.script.run 
.phaseName(this)"> 

注意“”关键字作为参数。 取下INPUT标记的onclick属性:

<input type="submit" class="button redButton" value="Submit"> 

在你的情况,你只有在形式的选择框。如果表单中有更多的输入元素,则在数组中可以有多个值。什么我的服务器被退回,这是:(假定我选择了“建设”的选择):

{=Construction} 

随着输入字段添加,你会得到这样的:

​​

我不要以为您可以使用document.getElementById('cboPhase').value作为google.script.run.funcName()中的参数。它返回NULL

你不能传递对象,你传递一个值:

document.getElementById('cboPhase').value 

如果没有<script>标签与命名它buttonClicker() 功能,那么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> 
+0

我的理解是谈话去了,像这样。客户端>>服务器>>客户端。这是html ui >> google.script.run.GSfunctionName()>>。onSuccessHandler(html

相关问题