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

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

感谢任何和所有帮助。

最佳答案

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

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

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

关于javascript - HTML 将表单输入传递给 JavaScript 并重置表单字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42069705/

相关文章:

javascript - jQuery 函数 .val() 不起作用

javascript - document.referrer 给出了错误的值

javascript - 如何使用 amcharts 4 在 map 中跨多个饼图创建共享图例?

javascript - 两个图像 - 如果单击图像是否显示其他图像?

javascript - 合并并导出多个文本区域?

python - 将 python 脚本与 django 集成

php - 如何使用复选框使用 HTML、CSS 正确处理 PHP 表单(URL)?

javascript - 如何在html中将一组整数乘以一个字符串?

javascript - 如何将 HTML 文本字段中的数据提交到 JavaScript 变量?

javascript - jQuery - 单选按钮单击()