2014-06-10 154 views
1

我有一些非常簡單的代碼,它是由google表單觸發的(請參閱http://goo.gl/lFHi3j),它要求輸入2個電子郵件地址。當電子郵件地址被硬編碼的代碼工作正常(見下面的註釋電子郵件),但當我嘗試並使用e.values獲得電子郵件(當表單提交)是收到以下錯誤TypeError:無法從undefined讀取屬性「1」

Execution failed: TypeError: Cannot read property "1" from undefined. (line 3, file "Code").

我已經搜索這個論壇,但無法找到解決這個問題。任何人都可以請幫忙。

function onFormSubmit (e) { 
//  var email_address_ = "[email protected]"; 
     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_}); 
    } 
+1

什麼部分的錯誤你不明白嗎?你爲什麼期望'e.values'存在? – SLaks

+0

即時假設(e)是一個事件...這意味着e.target將包含表單...但它仍然不僅僅會給你'值'...如果你正在引用特定的字段,然後使用'var email_address_ = document.getElementById('unique_id_for_email_address_field')。價值;' – xxcezz

+1

感謝您的意見 - 我認爲e.values將存在,因爲我正在尋找的電子郵件地址是由用戶在表單中提供的。我認爲當按下「提交」時,會觸發此腳本,並且e.values將包含用戶在表單中提供的所有輸入。這不正是它如何與以前版本的Google表單配合使用的嗎? – user3726045

回答

1

感謝所有幫助我找到解決問題的答案。這裏是因爲我已經就解決什麼工作我發現:

  1. 的谷歌應用程序腳本必須從 響應的電子表格來創建(作爲一個空白腳本),而不是表單本身!
  2. 在Google表單中,開發者可以選擇取消連接其 響應電子表格,併發送對新結果 電子表格的響應。如果選擇此選項,則需要從新結果電子表格創建一個新腳本 ,並且必須將代碼複製/移動到新腳本中 。當然,這意味着必須創建一個新的觸發器並且腳本需要被授權運行 。
  3. 一旦用戶提交表格,他們可以選擇 編輯/更正他們的提交。除非編輯EVERY字段,否則 腳本認爲未編輯的字段爲空,並在結果的Google Doc中寫入「未定義」 。因此,我已禁用了我的表單中的「編輯」 選項以解決此問題。
  4. 如果用戶跳過不相關的字段(留下空白),然後 e.values編號順序被拋出。因此,我已將每個字段強制爲 ,並註釋如果 字段不適用,則用戶輸入'n/a'。

通過解決這些問題,我的表格現在完美地工作(儘管有點笨拙,所有問題都是強制性的)。如果有人對如何解決編輯和空白字段問題有任何建議,我將不勝感激。

(感謝TJ休斯頓的原創劇本)

3

沒有e.values[1]

這就是爲什麼你會得到這個錯誤的問題的答案。

做一個console.log(e)並熟悉e包含的內容,方法是查看瀏覽器調試器中的日誌結果。

從那裏你可以自己判斷e.values是否作爲數組存在。然後從那裏出發。

相關問題