2015-02-11 57 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

相關問題