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

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

ただいまの
回答率

88.91%

[JavaScript][HTML] 表示項目ごとに削除ボタンをつけたい

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 176

rwatanabe

score 2

前提・実現したいこと

お世話になっております。
選択したファイルのファイル名とそのファイルを削除できる削除ボタン出力するように
実装しています。

2つのファイルを選択した場合
削除ボタンaを押すと○○.txtが削除され、削除ボタンbを押すと□□.jpgが削除される。
選択ボタン押すとエクスプローラーが開く。
ーーーーー以下、実行結果--------------
○○.txt [削除ボタンa]
□□.jpg [削除ボタンb]
入力項目 [選択ボタン]

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

削除ボタンa、削除ボタンbともに押すと、表示されているファイル全て削除される。

該当のソースコード

<tr class="tenpu_docs">
   <th class="v_top">添付資料</th>
       <td>
           <div class="file_row">
               <div id="FileName" class="file_wrapper">
                  <input type="file" th:field="*{icon_file}" id="docs" th:path="*{icon_file}" multiple="multiple"/>
                  <p class="file_name_keeper"></p><label for="docs">選択</label>
               </div>
            </div>
            <p style="color: #FF0000;" th:if="${#fields.hasErrors('*{icon_file}')}" th:errors="*{icon_file}"></p>
       </td>
</tr>
//アップロードファイル選択
$(document).on('change','#docs',function(){
    var file = $(this).prop('files');
    var len = file.length;

    for (var i=0; i < len; i++) {
        var fileName = file[i].name;
        console.log(fileName);
        var element = document.getElementById('FileName');
        //var filePath = fileData.presult;

        //ファイル名を表示
        if (i==0) {
             $(this).closest('div').find('p.file_name_keeper').html(fileName).addClass('on_keep');

        } else {
            var h = '<p class="file_name_keeper on_keep">' + fileName + '</p>';
            file_wrapper.innerHTML =  element.insertAdjacentHTML('beforeend', h);
        }

        //削除ボタンを追加
        $(this).closest('div').append('<span class="b_del remove"></span>');
    }
    //選択ラベルを削除
    $(this).closest('div').find('label').remove();
    //追加ボタンを削除
    //    $(this).closest('td').find('.b_add').remove();
    //アップロードフィールドのセットを追加
    $(this).closest('td').append('<div class="file_row"><div class="file_wrapper"><input type="file" name="tenpu_file[]" id="docs'+dupNum+'"><p class="file_name_keeper"></p><label for="docs'+dupNum+'">選択</label></div><!--<span class="b_del"></span>--></div>')
    dupNum++;
})
//アップロードファイル削除
$(document).on('click','tr.tenpu_docs .b_del', function () {
  $(this).closest('div.file_wrapper').remove();
})

補足情報(FW/ツールのバージョンなど)

jQueryバージョン
jquery3.3.0.min.js
jquery-ui.js
jquery.ui.touch-punch.min.js

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

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

  • ただいまの回答率 88.91%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る