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

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

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

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

6回答

2613閲覧

javascriptのchangeイベント処理の発火条件を追加するには・・・

rena_168

総合スコア72

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2021/12/13 01:14

編集2021/12/13 03:32

ローカルファイルのアップロードで、ファイル指定後のchangeイベント発火処理時、ボタンのsubmitのclickイベントが発火したらrun関数の中を実行させたいです。。

submitクリック後、run関数の変数のobjが変でうまくアップロードできません。

どなたかご存じでしょうか?

html

1 <form><input name="file" id="uploadfile" type="file" /></form> 2 <div id="progress"></div> 3 <div><button type="submit" id="teisyutsu_id" style="margin-top:30px;">提出する</button></div>

javascript

1 document.getElementById("teisyutsu_id").addEventListener("click",submitForm,false); 2 3 function submitForm(e) { 4 document.getElementById("progress").innerText = "Start"; 5 } 6 document.getElementById("uploadfile").addEventListener("change", run, false); 7 // document.querySelector('form').addEventListener('submit', run); 8 9 function run(obj) { 10 if (document.getElementById('progress').innerText == 'Start') { 11 google.script.run 12 .withSuccessHandler((accessToken) => 13 ResumableUploadForGoogleDrive(accessToken, obj) 14 ) 15 .getAuth(); 16 } 17 }

ファイル選択のダイアログによるアップロードファイルを指定

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

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

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

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

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

yambejp

2021/12/13 02:06

ファイルのアップロードは最低限methodとenctypeの指定が必要です submitをformに含めない場合はform属性が必要です
int32_t

2021/12/13 02:14

change イベントと click イベントが同時に発火することはあり得ません。欲しい動作はどんなものなんでしょうか?
rena_168

2021/12/13 02:17

アップロードファイルを指定(changeイベント発火)後、ボタンクリックした後に、正式にファイルのアップロード処理(run関数)を実行させたいです。現状は、changeイベント発火後すぐにrun関数が実行されます。
yambejp

2021/12/13 04:01

回答しましたがchangeイベントで何かをする必要はなくrequiredだけつけておけば changeされないかぎりファイルは空なのでサブミットしてもエラーになってくれます
guest

回答6

0

run()<form>submitイベントに登録して、<input type=file>required 属性を付けてファイルを指定しないと送信できないようにするのはどうでしょうか。

html

1<input name="file" id="uploadfile" type="file" required/>

js

1document.querySelector('form').addEventListener('submit', run);

投稿2021/12/13 02:22

int32_t

総合スコア21695

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

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

0

自己解決

本当の解決にはならず、結局ファイル選択後すぐイベント発火のままで終わらせました。
皆さん、色々とありがとうございました!

投稿2021/12/31 00:40

rena_168

総合スコア72

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

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

0

type=fileのchangeイベントが発生しないとsubmitできない仕様にしたいなら
たんにtype=file要素にrequiredをつけるだけで良いのでは?

投稿2021/12/13 02:23

yambejp

総合スコア116724

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

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

0

引数ごとに何が入るのか、などconsole.logなどを使い、
確認しながら構文を組むようにしましょう。
コメントにあります、targetを取得したいなら、下記になるかと。

javascript

1document.getElementById("teisyutsu_id").addEventListener("click",submitForm,false); 2 3function submitForm(e) { 4 document.getElementById("progress").innerText = "Start"; 5} 6 7document.getElementById("uploadfile").addEventListener("change", e => { 8 // 引数eには、イベントオブジェクトが入る。その中に、targetというプロパティが存在する 9 run(e); 10}, false); 11 12function run(obj) { 13 if (document.getElementById('progress').innerText == 'Start') { 14 google.script.run 15 .withSuccessHandler((accessToken) => 16 ResumableUploadForGoogleDrive(accessToken, obj) 17 ) 18 .getAuth(); 19 } 20}

-------- 以下元回答 --------
クロージャを使えばよいかと。
(一応、callメソッドで、イベント発火要素を取得できるようにしてます)

javascript

1document.getElementById("uploadfile").addEventListener("change", function(){ 2 run.call(this); 3}, false); 4 5document.getElementById("teisyutsu_id").addEventListener("click", function(){ 6 run.call(this); 7}, false);

投稿2021/12/13 02:18

編集2021/12/13 04:14
miyabi_takatsuk

総合スコア9555

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

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

rena_168

2021/12/13 02:31

わー、callも初めてみるので、試してみます! ありがとうございます!
rena_168

2021/12/13 03:12

以下のエラーが出ました。 Cannot read property 'target' of undefined Googleドライブへのアップロードだから、普通とちょっと違いますかね?!
miyabi_takatsuk

2021/12/13 04:03

それは、質問者さんの構文が今どういう状態なのか(特にrun関数の中身)わからないと、回答しようがありません。 汎用性を持たせているわけではないので。
miyabi_takatsuk

2021/12/13 04:05

質問のコードの修正いただいてましたね・・・。 やりたいことが見えてきたので、回答修正します。
guest

0

Event.preventDefault()のことでしょうか?
JsFiddle-kszL5dae

投稿2021/12/13 02:16

skys215

総合スコア910

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

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

0

Javascript

1function run(){ 2 document.getElementById('teisyutsu_id').click(); 3}

のことでしょうか?

投稿2021/12/13 01:40

skys215

総合スコア910

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

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

rena_168

2021/12/13 01:45

回答ありがとうございます。 このクリックをif文にして、run関数の中の処理を実行させたいですが、可能でしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問