【问题标题】:JS variable is displayed as undefined when using HTML使用 HTML 时 JS 变量显示为未定义
【发布时间】:2021-08-20 10:27:18
【问题描述】:

我正在开发一个关于 Google Apps 脚本的项目。我有一个返回日期(作为文本)的 JS 函数。我还有一个 HTML 文档来显示带有多个输入的表单。我想用 JS 函数返回的日期预填充一个输入。它几乎可以工作,除了它显示“未定义”而不是日期,即使我知道 js 功能工作正常。 这里有一些代码可以更好地理解:

我调用脚本的输入(不要介意 onmousemove,我只是没有找到另一种调用脚本的方法)。

<input type="text" id="deliveryDate" name="deliveryDate" onmousemove="displayActiveDate()">

所以它调用了下面的脚本。

<script>
    function displayActiveDate(){
      var activeDate = google.script.run.getActiveDate();
      document.getElementById("deliveryDate").value = activeDate;
    }
</script>

然后调用 getActiveDate() ,这是返回日期的单独 JS 函数。

如果您对如何解决此问题有任何想法,我将非常感谢。

【问题讨论】:

  • 我怀疑google.script.run.getActiveDate()不在displayActiveDate()范围内(可能整个google对象不在范围内)。
  • developers.google.com/apps-script/guides/html/reference/run — “google.script.run 是一个 异步 客户端 JavaScript API”所以它不会返回值。阅读它的文档。
  • 你需要有withSuccessHandler()回调,阅读文档
  • 感谢您的指导,遵循withSuccessHandler() 上的文档实际上确实有效(稍有延迟,但我想没有什么可做的,因为它需要进行回调)。谢谢大家!
  • 很好,那我会写一个正确的答案

标签: javascript html google-apps-script


【解决方案1】:

google.script.run.serverSideFunction() 返回undefined。为了从您的 serverSideFunction() 获取实际响应值,您需要使用带有回调的 withSuccessHandler() 方法,如下所示:

google.script.run.withSuccessHandler(onSuccess).serverSideFunction();

function onSuccess(data) {
  // do something with the data returned by the serverSideFunction()
}

另外请注意,您还有 withFailureHandler(err) 来处理服务器端函数可能返回的任何错误。

这里是full reference

【讨论】:

    【解决方案2】:

    在你的脚本中输入document.getElementById("deliveryDate").innerHTML= activeDate;而不是写document.getElementById("deliveryDate").value = activeDate;

    【讨论】:

    • 那行不通。问题是关于预填充一个input,所以不能有任何子节点,所以innerHTML将没有效果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多