include(page) function for script not loading DOM references

问题描述 投票:0回答:0

使用 Google Apps Script HtmlService 类产生一些输出。这个具体案例适用于 Google 表格侧边栏,但我在用作网络应用程序时也会遇到它。

我遇到了一个问题,如果我将我的脚本直接放入 html 文件中,DOM 引用工作正常。一旦我将它们放入 scriptlet 中,它就会抛出错误;

Uncaught TypeError: Cannot read properties of null (reading 'value')

这是 html 表单和脚本:

<body>
  <?!= include('LOGO') ?>
  <form id="add">
    <div><input id=" fName" type="text" /> First Name</div>
    <div><input id="lName" type="text" /> Last Name</div>
    <div><input id="empId" type="text" /> ID#</div>
    <div><input id="job" type="text" /> Job</div>
    <div><input id="wage" type="text" /> Wage</div>
    <div id="job2" type="text" style="display: none"><input id="jobtwo" type="text" /> Job 2</div>
    <div id="wage2" type="text" style="display: none"><input id="wagetwo" type="text" /> Wage 2</div>
    <div id="job3" type="text" style="display: none"><input id="jobthree" type="text" /> Job 3</div>
    <div id="wage3" type="text" style="display: none"><input id="wagethree" type="text" /> Wage 3</div>
    <div>
      <button id="enter" type="button" onclick="addRecord()"> Enter</button>
      <button id="more" type="button" onclick="moreJobs()"> + Job</button>
      <button id="less" type="button" onclick="lessJobs()"> - Job</button>
      <button id="close" type="button" onclick="closeSide()"> Close</button>
    </div>
  </form>

  <?!= include("AddEmpJS") ?>
</body>

这是include函数引用的AddEmpJS.html;

<script>
    function addRecord() {
      let fname = document.getElementById("fName").value
      let lname = document.getElementById("lName").value
      let empId = document.getElementById("empId").value
      let job = document.getElementById("job").value
      let wage = document.getElementById("wage").value
      let job2 = document.getElementById("jobtwo").value
      let wage2 = document.getElementById("wagetwo").value
      let job3 = document.getElementById("jobthree").value
      let wage3 = document.getElementById("wagethree").value
      let record = [
        fname, lname, empId, job, wage, job2, wage2, job3, wage3
      ]
      console.log(record)
      google.script.run.addEmpRecord(record);
      document.getElementById("add").reset()
    }

    function moreJobs() {
      if(document.getElementById("job2").style.display == "none") {
        document.getElementById("job2").style.display = "block"
        document.getElementById("wage2").style.display = "block"
        return "job 2 showing"
      }
      if(document.getElementById("job3").style.display == "none") {
        document.getElementById("job3").style.display = "block"
        document.getElementById("wage3").style.display = "block"
        return "job 3 showing"
      }
    }

    function lessJobs() {
      if(document.getElementById("job3").style.display == "block") {
        document.getElementById("job3").style.display = "none"
        document.getElementById("wage3").style.display = "none"
        return "removing job 3"
      }      
      if(document.getElementById("job2").style.display == "block") {
        document.getElementById("job2").style.display = "none"
        document.getElementById("wage2").style.display = "none"
        return "removing job 2"
      }
    }

    function closeSide() {
      google.script.host.close()
    }

  </script>

以及服务器端的包含功能;

function include(page) { return HtmlService.createHtmlOutputFromFile(page).getContent(); }

我想利用 include("page") 函数来保持样式、脚本和 html 的独立性和可读性。我在这里错过了什么?

我认为这与数据的加载和评估方式有关,但不知道如何应用修复程序。

当我将代码拆分到 scriplet 包含函数时,我研究了使用 window.onload 事件处理程序来重新评估代码,但我不知道这是否是使用表单的最佳方法。

javascript google-chrome google-apps-script google-sheets dom
© www.soinside.com 2019 - 2024. All rights reserved.