🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

662閲覧

trigger()を実行できずにいます

pecchan

総合スコア591

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2021/02/05 05:22

前提・実現したいこと

jQuery初心者です。宜しくお願いします。

ファイルのアップロードを作ってます。
inputボタンからアップロードできたので、これをドラッグ&ドロップでも可能にしようとしてます。

発生している問題・エラーメッセージ

ドロップ時に、先に作ったアップロードの処理を呼ぼうと、trigger()を実行したのですが反応しません。

ソースコード

html

html

1 <label class="upload-img__label" > 2 <div class="upload-img__label__inner"> 3 <input class="upload-img__input" accept="image/png,image/jpeg" multiple="multiple" type="file" style="display: none;"> 4 <svg width="24" height="24" fill="#222222" fill-rule="evenodd" viewBox="0 0 24 24" aria-hidden="true" > 5 <path d="M19.3,5H16.73l-.8-1.61A.7.7,0,0,0,15.3,3H8.7a.7.7,0,0,0-.63.39L7.27,5H4.7A2.7,2.7,0,0,0,2,7.7V18.3A2.7,2.7,0,0,0,4.7,21H19.3A2.7,2.7,0,0,0,22,18.3V7.7A2.7,2.7,0,0,0,19.3,5ZM12,17.3A4.3,4.3,0,1,1,16.3,13,4.31,4.31,0,0,1,12,17.3Z"></path> 6 </svg> 7 <p class="fs12">ドラッグアンドドロップ<br>またはクリックしてファイルをアップロード</p> 8 </div> 9 </label>

inputボタンのクリックでアップロードするjs
upload.js

javascript

1$(document).on('click', '.upload-img__label', function() { 2 $('.upload-img__label').off('click'); 3 4 $('.upload-img__input').off('change'); 5 $('.upload-img__input').on('change', function (e) { 6 7 alert("dropから呼ばれない"); 8 9 // ファイル未選択なら処理を抜ける 10 c = $('.upload-img__input').val().length; 11 if(c==0){ 12 return; 13 } 14 15 16 uploadFile(e, this); 17 18 }) 19}); 20

ドラッグ&ドロップで上記のjsを呼ぶjs
drop.js

javascript

1 2 3$('.upload-img__label').on('dragstart', onDragStart); 4$('.upload-img__label').on('dragover', onDragOver); 5$('.upload-img__label').on('drop', onDrop); 6 7 8function onDragStart(e) { 9 e.originalEvent.dataTransfer.setData('text', this.id); 10} 11 12function onDragOver(e) { 13 e.preventDefault(); 14} 15 16function onDrop(e) { 17 e.preventDefault(); 18 19 alert("start"); 20 let file = e.originalEvent.dataTransfer.files; 21 $('.upload-img__input')[0].files = file; 22 $('.upload-img__input').trigger('change', e); //ここで何も起きない 23 alert("end"); 24 25} 26 27 28 29 30 31

inputボタンクリックによるアップロードは出来ております。
choromeの検証にエラーは出てません。
dropのタイミングで.upload-img__inputが認識出来ていないのでしょうか?

先輩方教えていただけないでしょうか?
宜しくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

upload-img__labelのdrop処理とupload-img__inputのchangeを
紐付ける意味がないのでは?
upload-img__inputをonでchangeを監視しておけば済む話です
アップロードするならsubmitしたりajaxを読んだりすればよいですよね?

投稿2021/02/05 05:56

yambejp

総合スコア116661

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

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

pecchan

2021/02/05 06:12

回答有難う御座います。 upload-img__inputのchangeイベントでアップロードする処理は出来てました。 次にdropでも同イベントを発生させたいので、単純にdropイベントから同イベント(change)を呼ぶ必要があるのかと思ってしまいました。 >changeを監視しておけば済む話です 要領を得ず申し訳ございません。 「jQuery 監視」などでググりましたが、この部分がよく分からずにいます。 これは、どういう意味でしょうか?
yambejp

2021/02/05 07:09

根本的な考え方がダメなのかもしれません こんなふうにすれば、楽です <div class="upload-img__label__inner"> <input class="upload-img__input" accept="image/png,image/jpeg" multiple="multiple" type="file"> <svg width="24" height="24" fill="#222222" fill-rule="evenodd" viewBox="0 0 24 24" aria-hidden="true" > <path d="M19.3,5H16.73l-.8-1.61A.7.7,0,0,0,15.3,3H8.7a.7.7,0,0,0-.63.39L7.27,5H4.7A2.7,2.7,0,0,0,2,7.7V18.3A2.7,2.7,0,0,0,4.7,21H19.3A2.7,2.7,0,0,0,22,18.3V7.7A2.7,2.7,0,0,0,19.3,5ZM12,17.3A4.3,4.3,0,1,1,16.3,13,4.31,4.31,0,0,1,12,17.3Z"></path> </svg> <p class="fs12">ドラッグアンドドロップ<br>またはクリックしてファイルをアップロード</p> </div> <style> .upload-img__label__inner{ border:1px solid; position:relative; } .upload-img__input{ position:absolute; top:0; width:100%; height:100%;; opacity:0; } </style>
pecchan

2021/02/08 20:57

やっと意味が理解できました。 外側のlabelがじゃましてイベントが伝播されてなかったわけですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問