2017-02-06 1 views
1

私はHTMLでフォームを作成してから、入力フィールドをフォームオブジェクトとしてjavascriptに渡しています。私は自分のプログラムがオブジェクトをJSに渡した後に1つ(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メソッドは、コールバックパラメータとして関数を受け入れます。あなたのコードwithSuccessHandler(FormSuccess())

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

FormSuccessメソッドを呼び出します。 FormSuccessには戻り値がありませんので、実際にはwithSuccessHandler(null)を呼び出してください。 ()を削除すると、関数を呼び出す代わりに、関数への参照が渡されます。 withSuccessHandlerは、最初に指定したパラメータとして呼び出したサーバー側関数の戻り値を加えたものを使用して、関数自体を呼び出します。

関連する問題