6

这里出了点问题,我从其他有类似问题的人那里尝试过的所有建议似乎都不起作用。

我有两个文件:谷歌脚本中的 myPage.html 和 myCode.gs。我已将 html 文件部署为 Web 应用程序,并且我已经(在帮助下)弄清楚了如何使“提交”按钮的 onclick 事件触发 myCode.gs 文件中的 emailTech 功能就好了。

现在我想将 html 文件中文本框中的值插入到从 onClick 事件调用的电子邮件中。我试过document.getElementById('textBoxId').value了,但我收到以下错误“参考错误:“文档”未定义。“什么给出?

myPage.html 文件:

<html>
<head>
    <title>Test Page</title>
</head>
<body>
<input type="button" onClick="google.script.run.emailTech();" value="Submit" />

<input type="text" value=" " id = "textBox" name = "textBox" />
</body>
    <script type="text/javascript">
    </script>
</html>

myCode.gs 文件:

  function doGet() {
  return HtmlService.createHtmlOutputFromFile('myPage');
}

function emailTech(){

  var nameBox = document.getElementById('textBox').value;
  var message = "This is the text box value" + nameBox;
  MailApp.sendEmail("123@xyz.com", "This is the subject", message );
}
4

1 回答 1

9

错误消息是正确的 - 在您的 Apps 脚本函数emailTech()中,范围内没有名为 的变量document

您有两种不同的部署 Apps 脚本 WebApp 的方法。由于您使用的是 HTML 服务(并且您的用户界面是一个 html 文件),因此您不能使用 UI 服务方法(如getElementById())来访问输入值。所以,你会做一些不同的事情。

要将提交按钮和输入字段绑定在一起,请使用包含在<form>标签中的表单。提交按钮仍然有一个 onclick 函数,但现在它将是一个嵌入在您的 HTML 中的 javascript 函数,它将所有输入从表单传递到您的emailTech()函数。

在您的应用程序脚本端处理程序中,您将收到作为对象的表单输入,表单中的字段作为键值对。关键是name从领域。

此答案中描述了一般解决方案。这是适合您的代码的版本。我省略了 Arun 展示的成功和失败处理。当然,在现实生活中部署它之前,您应该构建错误检查。

代码.gs

function doGet() {
  return HtmlService.createHtmlOutputFromFile('myPage');
}

function emailTech(form){

  var nameBox = form.techEmail;
  var message = "This is the text box value" + nameBox;
  MailApp.sendEmail("email@somewhere.com", "This is the subject", message );

}

我的页面.html

<html>

    <head>
        <title>Test Page</title>
    </head>

    <body>
        <form>
            <input type="text" value=" " name="techEmail" />
            <input type="button" onClick="formSubmit()" value="Submit" />
        </form>
    </body>
    <script type="text/javascript">
        function formSubmit() {
            google.script.run.emailTech(document.forms[0]);
        }
    </script>

</html>
于 2013-05-13T17:48:55.927 回答