0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ファイルアップロード機能をファイル選択ボタン非表示で行う方法

Posted at

前提

・ ファイルアップロード機能を作りたい人
・ 「ファイルを選択」ボタンを表示させたくない人

ファイルアップロード

通常ファイルアップロード機能を作る場合、「input type="file"」にすると思うが、それだとファイル選択が表示される。

スクリーンショット 2022-08-23 21.45.23.png

<form method="POST" action="/upload" enctype='multipart/form-data'>
    <input type="file">
</form>

こういった「ファイルを選択」ボタンを出さないようにするにはどうすれば良いのだろうか。
スクリーンショット 2022-08-23 21.47.00.png

解決策

「input type="file"」を非表示にし、divタグなどでファイルアップロードをするエリアを用意(今回でいうと
スクショの写真追加のエリア)し、labelタグで囲うとlabel配下要素のイベントを紐付けることができます。
それにより「class="img-contents"」エリアを押下すれば、「ファイルを選択」ボタン押下時の挙動が起こります。

<label>
   <form method="POST" action="/upload" enctype='multipart/form-data'>
   <div class="img-contents">
     <img class="img">
     <span class="photo">写真追加</span>
   </div>
   <input type="file" name="img" hidden>
   </form>
</label>
.photo {
  color: #ddd;
  font-size: 20px;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translateY(-50%) translateX(-50%);
}

.img-contents {
  width: 600px;
  height: 400px;
  border: 1px dashed skyblue;
  position: relative;
}

.img {
  position: absolute;
  width: 600px;
  height: 400px;
}

labelで囲ったエリアで特定の要素を要素を押下した際、「input type="file"」を発火させたくない場合、「preventDefault()」使えば下記の場合、「class="btn"」押下後、eventを実行することを抑制できます。

$(document).on("click", ".btn", function (event) {
  event.preventDefault();
}); 

以上、 「ファイルを選択」ボタンを表示させないでファイルアップロードする方法でした。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?