【问题标题】:TypeError: Cannot read property "1" from undefinedTypeError:无法从未定义中读取属性“1”
【发布时间】:2014-07-31 09:25:11
【问题描述】:

我有一些非常简单的代码,它由要求 2 个电子邮件地址的 google 表单(请参阅http://goo.gl/lFHi3j)触发。当电子邮件地址被硬编码时,代码工作正常(请参阅下面的注释电子邮件)但是当我尝试使用 e.values 获取电子邮件时(提交表单时)得到以下错误

执行失败:TypeError:无法从未定义中读取属性“1”。 (第 3 行,文件“代码”)。

我搜索了这个论坛,但找不到解决这个问题的方法。谁能帮忙。

    function onFormSubmit (e) {
//     var email_address_ = "pian1966@gmail.com";
       var email_address_ = e.values[1];

// Send the email
       var subject_ = "Andy's Report";
       var body_    = "Here is Andy's report...";
       MailApp.sendEmail(email_address_, subject_, body_, {htmlBody: body_}); 
    }

【问题讨论】:

  • 错误的哪一部分你不明白?你为什么期望e.values 存在?
  • 我假设 (e) 是一个事件......这意味着 e.target 将包含表单......但它仍然不仅仅是会给你“价值”......如果你引用特定字段然后使用var email_address_ = document.getElementById('unique_id_for_email_address_field').value;
  • 感谢您的 cmets - 我认为 e.values 会存在,因为我正在寻找的电子邮件地址是由用户在表单中提供的。我认为当按下“提交”时,将触发此脚本,并且 e.values 将包含用户在表单中提供的所有输入。这不是与以前版本的 Google 表单一起使用的方式吗?
  • 尝试将console.dir(e) 作为onFormSubmit 中的第一条语句,以了解它采用哪种形式。

标签: javascript typeerror


【解决方案1】:

没有e.values[1]

这就是您为什么会收到该错误的问题的答案。

执行console.log(e) 并通过在浏览器调试器中查看日志结果来熟悉e 的内容。

从那里您可以自己确定 e.values 是否以数组的形式存在。然后从那里去。

【讨论】:

    【解决方案2】:

    感谢您的回复,这些回复帮助我找到了解决我遇到的问题的方法。以下是我在研究解决方案时的发现:

    1. 必须从以下位置创建 Google App 脚本(作为空白脚本) 响应电子表格,而不是表格本身!
    2. 在 Google 表单中,开发人员可以选择取消链接他们的 响应电子表格并发送对新结果的响应 电子表格。如果选择此选项,则需要一个新脚本 从新的结果电子表格创建,代码必须是 复制/移动到新脚本中。当然这意味着一个新的 必须创建触发器并且脚本需要被授权 运行。
    3. 用户提交表单后,他们可以选择 编辑/更正他们的提交。除非每个字段都被编辑,否则 脚本认为未编辑的字段为空白并写入“未定义” 到生成的 Google Doc 中。因此,我禁用了“编辑” 我的表单中的选项来解决这个问题。
    4. 如果用户跳过不相关的字段(将它们留空),那么 e.values 编号顺序被丢弃。因此我做了 每个字段都必须带有用户输入“n/a”的注释,如果 a 字段不适用。

    在解决了这些问题后,我的表格现在可以完美运行(尽管所有问题都是强制性的,虽然有点笨拙)。如果有人对如何解决编辑和空白字段问题有任何建议,我将不胜感激。

    (感谢 TJ Houston 的原创剧本)

    【讨论】:

      猜你喜欢
      • 2019-10-18
      • 2021-12-21
      • 2016-03-25
      • 2012-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多