HTML将表单输入传递给javascript并重置表单字段

时间:2017-02-06 14:04:55

标签: javascript html forms google-apps-script

我正在用HTML创建一个表单,然后将输入字段作为表单对象传递给javascript。我希望我的程序在将对象传递给JS之后重置除了一个(name)之外的所有输入字段,但看起来字段在传递给JS之前会被重置。

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?或者有没有不同的方法来完成我想要做的事情?

感谢任何和所有帮助。

1 个答案:

答案 0 :(得分:1)

withSuccessHandler方法接受一个函数作为其回调参数。

  

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

在您的代码withSuccessHandler(FormSuccess())中将调用FormSuccess方法。 FormSuccess没有返回值,因此实际上您调用了withSuccessHandler(null)。通过删除(),您将传递对函数的引用,而不是调用该函数。 withSuccessHandler将使用您给出的引用调用函数本身,添加您作为第一个参数调用的服务器端函数的返回值。