実現したいこと
質問フォームから画像やコメントを記入して、テーブルの中に入れたい
↓↓実際に表示されているイメージです↓↓
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
前提
HTMLとJavascriptを使って”表への追加項目”の内容をテーブルにまとめられるようなポートフォリオを作りたい。
試したこと
WEBの全体像です。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
下記のようにコードを作成して試してみましたがテーブル内に画像が組み込めませんでした。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>PAIN LIST</title> <link rel="stylesheet" href="/css/style.css"> <script src="/send_url.js"></script> </head> <body> <header> <a href="/" class="header-logo">PAIN LIST</a> </header> <div class="container"> <div class="container-header"> <h1>疼痛状況</h1> </div> <table id="table1" > <tr> <th width="18%">画像</th> <th width="20%">動作・部位</th> <th width="8%">痛みの度合い</th> <th width="51%">memo</th> </tr> <tr> <td width="18%">(例)画像</td> <td width="20%">(例)ジョギング・膝関節</td> <td width="8%">(例)強い</td> <td width="51%">(例)10分程度ジョギングをすると膝の内側が徐々に痛くなってくる。</td> </tr> </table> <b><a id="download" href="#" download="pain_list.csv" onclick="handleDownload()" class="csvdownload">csvファイルダウンロード</a></b> <hr color="#896000" size="3px"> <h4>表への追加項目</h4> <p class="form-label" >画像</p> <input name="table1_cell_value" type="file" id="th_value1" multiple> <!-- ここにプレビュー画像を追加する --> <div id="preview"></div> <script> function previewFile(file) { // プレビュー画像を追加する要素 const preview = document.getElementById('preview'); // FileReaderオブジェクトを作成 const reader = new FileReader(); // ファイルが読み込まれたときに実行する reader.onload = function (e) { const imageUrl = e.target.result; // 画像のURLはevent.target.resultで呼び出せる const img = document.createElement("img"); // img要素を作成 img.src = imageUrl; // 画像のURLをimg要素にセット preview.appendChild(img); // #previewの中に追加 } // ファイルを読み込む reader.readAsDataURL(file); } // <input>でファイルが選択されたときの処理 const fileInput = document.getElementById('th_value1'); const handleFileSelect = () => { const files = fileInput.files; for (let i = 0; i < files.length; i++) { previewFile(files[i]); } } fileInput.addEventListener('change', handleFileSelect); </script> <p class="form-label" >動作・部位</p> <input name="table1_cell_value" id="th_value2" type="text" class="form-text"> <p class="form-label" >痛みの度合い</p> <input name="table1_cell_value" id="th_value3" type="text" class="form-label2" > <p class="form-label" >memo</p> <input name="table1_cell_value" id="th_value4" type="text" class="form-label2" > <input class="delete-submit" type="button" value="表に上記内容を追加 (クリック)" onclick="add_line()" > </div> <script> function previewFile(hoge){ var fileData = new FileReader(); fileData.onload = (function() { //id属性が付与されているimgタグのsrc属性に、fileReaderで取得した値の結果を入力することで //プレビュー表示している document.getElementById('preview').src = fileData.result; }); fileData.readAsDataURL(hoge.files[0]); } </script> <script> //ここから表の行追加のコード function add_line() { for(var i = 0; i < document.getElementsByName("table1_cell_value").length; i++){ if(document.getElementsByName("table1_cell_value")[i].value ==""){ alert("未入力項目があります。"); return false; } } var table = document.getElementById('table1');//id=table1という要素を取得 var row = table.insertRow(-1);//id=table1の中にtrタグを最後の子要素として追加 var cells = new Array(); for(var i = 0; i < table.rows[0].cells.length; i++){ cells[i] = row.insertCell(-1);//新しく作ったrowの中にtrタグを最後の子要素として追加 cells[i].innerText=document.getElementsByName("table1_cell_value")[i].value; document.getElementsByName("table1_cell_value")[i].value="";//入力フィールドの初期化 } } //ここまで表の列追加のコード //ここからCSV出力&ダウンロード function handleDownload() { var bom = new Uint8Array([0xEF, 0xBB, 0xBF]);//文字コードをBOM付きUTF-8に指定 var table = document.getElementById('table1');//id=table1という要素を取得 var data_csv="";//ここに文字データとして値を格納していく for(var i = 0; i < table.rows.length; i++){ for(var j = 0; j < table.rows[i].cells.length; j++){ data_csv += table.rows[i].cells[j].innerText;//HTML中の表のセル値をdata_csvに格納 if(j == table.rows[i].cells.length-1) data_csv += "\n";//行終わりに改行コードを追加 else data_csv += ",";//セル値の区切り文字として,を追加 } } var blob = new Blob([ bom, data_csv], { "type" : "text/csv" });//data_csvのデータをcsvとしてダウンロードする関数 if (window.navigator.msSaveBlob) { //IEの場合の処理 window.navigator.msSaveBlob(blob, "pain_list.csv"); //window.navigator.msSaveOrOpenBlob(blob, "test.csv");// msSaveOrOpenBlobの場合はファイルを保存せずに開ける } else { document.getElementById("download").href = window.URL.createObjectURL(blob); } delete data_csv;//data_csvオブジェクトはもういらないので消去してメモリを開放 } //ここまでCSV出力&ダウンロード </script> </div> </body> </html>
試してみた結果
上記のコードを試した結果、下の画像のように文字のみがテーブルに入ってしまう状況です。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
どのように書き換えれば目標とする動作になるのか路頭に迷っている状況です。
ご教授いただけたら幸いです。
何卒宜しくお願い致します。

回答2件
あなたの回答
tips
プレビュー