質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

2回答

2875閲覧

onClickからaddEventListenerに変換した際、引数はどれを入れたらよろしいでしょうか?

zigutabi

総合スコア57

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2020/07/08 02:35

現在、Googleスプレットシートにモーダルダイアログを開いて、そこからCSVのデータをアップロードするスクリプトを組んでおります。
参考にしているサイトは以下のところです。
https://tonari-it.com/gas-dialog-file-blob/

ここではコード.gsに定義した関数をindex.htmlで呼ぶように組んでおります。

index.html

1<!DOCTYPE html> 2<html> 3 <head> 4 <base target="_top"> 5 </head> 6 <body> 7 <form> 8 <input name="myFile" type="file"> 9 <button onclick="google.script.run.uploadCsv(this.parentNode);">アップロード</button> 10 </form> 11 <script> 12 </script> 13 </body> 14</html>

ただ、ここで書かれている方法はボタンタグに直接関数を差し込んでいるものであり、今のコーディングガイドラインでは即しないと思いました。
そこでイベントリスナーに差し替えようとした。

index.html

1<!DOCTYPE html> 2<html> 3 <head> 4 <base target="_top"> 5 </head> 6 <body> 7 <form> 8 <input name="myFile" type="file" /> 9 <button id='uploader'>アップロード</button> 10 </form> 11 <script> 12 const btn = document.querySelector('#uploader'); 13 14 btn.addEventListener('click', (e) => { 15 google.script.run.uploadCsv(e.parentNode); 16 }); 17 </script> 18 </body> 19</html>

この状態でアップロードを実行したのですが動作せず、ログを確認したところ以下のエラーが発生したのをcatchしました。

エラー内容: TypeError: Cannot read property 'myFile' of null

uploadCsvに何を渡せばよろしいでしょうか?

今回、あまり関係が薄いですがGAS側はこのように定義しております。

const ss = SpreadsheetApp; const showDialog = function(){ const html = HtmlService.createHtmlOutputFromFile('index'); ss.getUi().showModalDialog(html, "CSVアップローダー"); } const uploadCsv = function(form){ try{ const blob = form.myFile; //addEventListenerに書き換えたコードではここのmyFileがnullだった Logger.log("アップロードファイル名: " + blob.getName()); }catch(e){ Logger.log("エラー内容: " + e); } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

javascript

1btn.addEventListener('click', function(e) { 2 google.script.run.uploadCsv(e.target.parentNode); 3});

ではないですか?

投稿2020/07/08 02:55

yambejp

総合スコア116724

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2020/07/08 02:57

このparentNodeはformを指しているのですかね? 要素からformを指定するなら e.target.formとかにしないと、HTMLの構造が変わったときに 拾えなくなりますね
zigutabi

2020/07/08 03:28

すみません、こちらもHTML側でコケているようです。
zigutabi

2020/07/08 04:18 編集

う~ん、ChomeV8を無効にしたら動きました。 なんかコード上の問題ではなく、GAS側の不具合によってLogger.logが動いていないようです。 しばらく様子見してみます。
guest

0

js

1 const btn = document.querySelector('#uploader'); 2 3 btn.addEventListener('click', function(e) { 4 google.script.run.uploadCsv(this.parentNode); 5 });

アロー関数でなければ、this.parentNodeで同様に取得できるかと思います。

投稿2020/07/08 02:41

編集2020/07/08 02:42
hiro0218

総合スコア68

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

zigutabi

2020/07/08 02:56

すみません、html側でコケてしまっているようです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問