2017-02-06 77 views
1

我在HTML中創建一個表單,然後將輸入字段作爲表單對象傳遞給javascript。我希望我的程序在將對象傳遞給JS之後重置除了一個(name)之外的所有輸入字段,但是它們在傳遞給JS之前似乎已重置。HTML傳遞給javascript和重置表單域的輸入

HTML

<!DOCTYPE html> 
<html> 
    <head> 
    <base target="_top"> 
    <script> 
     // Prevent form from submitting 
     function preventFormSubmit() { 
     var forms = document.querySelectorAll('form'); 
     for (var i = 0; i < forms.length; i++) { 
      forms[i].addEventListener('submit', function(event) { 
      event.preventDefault(); 
      }); 
     } 
     } 
     window.addEventListener('load', preventFormSubmit); 

     function FormSubmit(formObject) { 
     google.script.run.withSuccessHandler(FormSuccess()).EnterData(formObject); 
     } 
     function FormSuccess() { 
     var resets = document.getElementsByClassName("reset"); 
     for (var i = 0; i < resets.length; i++) { 
      resets[i].value = ""; 
     } 

     google.script.run.ProgramSuccess(); 
     } 
    </script> 
    </head> 

    <body> 
    <form id="entryForm" onsubmit="FormSubmit(this)"> 
     Name:<br> 
     <input type="text" name="name"> 
     <br> 
     Client Name:<br> 
     <input class = "reset" type="text" name="clientName"> 
     <br> 
     Project Type:<br> 
     <input class = "reset" type="text" name="projectType"> 
     <br> 
     Task:<br> 
     <input class = "reset" type="text" name="task"> 
     <br> 
     Hours:<br> 
     <input class = "reset" type="number" name="hours" min="0"> 
     <br><br> 
     <input type="submit" value="Submit"> 
     <input type="reset"> 
    </form> 
    </body> 
</html> 

的Javascript

function EnterData(fObject) { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName("Sheet1"); 
    sheet.activate(); 

    var entries = [[fObject.name, fObject.clientName, fObject.projectType, fObject.task, fObject.hours]]; 
    var range = sheet.getRange(sheet.getLastRow()+1, 2, 1, 5); 
    range.setValues(entries); 


    return; 
} 

function ProgramSuccess() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    ss.toast("Program Run Complete"); 
} 

我使用的withSuccessHandler不正確?或者有什麼不同的方式來完成我想要做的事情?

任何和所有的幫助表示讚賞。

+0

'withSuccessHandler(FormSuccess)'刪除'()'。處理程序正在尋找對該函數的引用。 –

+0

@SpencerEaston謝謝你,完美的工作。但是你能解釋一下爲什麼嗎?我假設你需要'()'來指定你正在運行一個函數,而不僅僅是傳遞某種類型的變量。 –

回答

1

withSuccessHandler方法接受一個函數作爲其回調參數。

https://developers.google.com/apps-script/guides/html/reference/run#withSuccessHandler(Function)

在你的代碼withSuccessHandler(FormSuccess())將調用FormSuccess方法。 FormSuccess沒有返回值,因此實際上你打電話給withSuccessHandler(null)。通過刪除(),您將傳遞該函數的引用,而不是調用該函數。 withSuccessHandler將使用您給它的引用調用函數本身,並添加您稱爲第一個參數的服務器端函數的返回值。

相關問題