前提・実現したいこと
結論
javascriptでcsvを複数読み込んでページ上に表示させる。
説明
csvファイルを読み込んで、ページ上で表示させたいのですが、読み込みたいcsvが複数あります。
また、1つのcsvファイルは固定で読み込みますが、もう1つのcsvファイルは、選択しているラジオボタンによって読み込むファイルを変更させたいです。
・①list.csv → 常時読み込んで表示させる内容
・②form1.csv, form2.csv … → ラジオボタンの項目によって読み込む内容
上記それぞれを読み込むためのjsファイルを作成しています。
前提
アップロードするサーバーではphpなどは使用できない
ページ内で検索フォームと検索結果を両方表示させる必要がある
発生している問題・エラーメッセージ
①だけ、もしくは②だけであればそれぞれ読み込んで動作するのですが、
①②両方を読み込んだ際に、反応しなくなります。
csvを読み込む記述とhtmlを生成する記述が紐づいていないためかと思うのですが、
同様の内容の質問が見つからずに困っています。
該当のソースコード
①用のjsソースコード
javascript
1//一覧表示用 2function readCsv(data) { 3 var target = '.list'; //csvを表示するところ 4 var csv = $.csv.toArrays(data); //csv読み込み 5 var insert = ''; //作るhtmlを入れるやつ 6 for (var i = 0; i<csv.length;i++){ 7 //htmlの要素 8 insert += ' <div class="item-list" data-no1="' + csv[i][0] + '" data-no2="' + csv[i][1] + '">'; 9 insert += ' </div>'; 10 } 11 //作ったhtmlを挿入 12 $(target).append(insert); 13} 14 15 //csvを読み込む 16 $(document).ready(function(){ 17 var csvfile = 'list.csv'; 18 $.get(csvfile, readCsv, 'text'); 19 }); 20 21//読み込みが完了したら 22$(document).ajaxStop(function() { 23 24});//読み込みが終わったらここまで
②用のjsソースコード
javascript
1//絞り込み項目用 2function readCsv(data) { 3 var target2 = '.form'; //csvを表示するところ 4 var csv2 = $.csv.toArrays(data); //csv読み込み 5 var insert2 = ''; //作るhtmlを入れるやつ 6 for (var i = 0; i<csv2.length;i++){ 7 insert2 += ' <div class="box">' 8 insert2 += ' <span class="label">' + csv2[i][0] + '</span>' 9 insert2 += ' <ul>' 10 for (var j = 1;j<csv2[i].length;j++){ 11 insert2 += ' <li><label><input type="checkbox" name="' + csv2[i][j] + '" value="' + csv2[i][j] + '">' + csv2[i][j] + '</label></li>' 12 } 13 insert2 += ' </ul>' 14 insert2 += ' </div>' 15 } 16 //作ったhtmlを挿入 17 $(target2).append(insert2); 18 19 //csvを読み込む 20 $(document).ready(function(){ 21 $('input[name="no1"]').change(function() { 22 var val = $(this).val(); 23 if (val == 'テストA') { 24 var csvfile2 = 'form1.csv'; 25 $.get(csvfile2, readCsv, 'text'); 26 } else if (val == 'テストB') { 27 var csvfile2 = 'form2.csv'; 28 $.get(csvfile2, readCsv, 'text'); 29 } 30 $(".form").empty(); 31 }); 32 }); 33} 34 35//読み込みが完了したら 36$(document).ajaxStop(function() { 37});//読み込みが終わったらここまで
htmlの記述
html
1 <section> 2 <div class="wrap"> 3 <p class="sub-ttl"検索</p> 4 <form class="search-form"> 5 <div class="box"> 6 <span class="label">1つめの項目</span> 7 <ul> 8 <li><input type="radio" name="no1" value="テストA" id="no1"><label for="no1">テストA</label></li> 9 <li><input type="radio" name="no2" value="テストB" id="no2"><label for="no2">テストB</label></li> 10 </div> 11 </div> 12 <div class="form"> 13 </div> 14 </form> 15 </section> 16 17 <section> 18 <div class="list"> 19 </div> 20 </section>
※①②のjsコードはそれぞれ別ファイルにして読み込んでいます。
試したこと
・jsファイルを1つにまとめる→読み込まれるcsvファイルが同一のものになってしまった。
javascript
1// csv読み込み関数 2function readCsv(data) { 3 //検索結果用 4 var target = '.list'; //csvを表示するところ 5 var csv = $.csv.toArrays(data); //csv読み込み 6 var insert = ''; //作るhtmlを入れるやつ 7 for (var i = 0; i<csv.length;i++){ 8 //htmlの要素 9 insert += ' <div class="item-list" data-no1="' + csv[i][0] + '" data-no2="' + csv[i][1] + '">'; 10 insert += ' </div>'; 11 } 12 //作ったhtmlを挿入 13 $(target).append(insert); 14} 15 16 //絞り込み項目用 17 var target2 = '.form'; //csvを表示するところ 18 var csv2 = $.csv.toArrays(data); //csv読み込み 19 var insert2 = ''; //作るhtmlを入れるやつ 20 for (var i = 0; i<csv2.length;i++){ 21 insert2 += ' <div class="box">' 22 insert2 += ' <span class="label">' + csv2[i][0] + '</span>' 23 insert2 += ' <ul>' 24 for (var j = 1;j<csv2[i].length;j++){ 25 insert2 += ' <li><label><input type="checkbox" name="' + csv2[i][j] + '" value="' + csv2[i][j] + '">' + csv2[i][j] + '</label></li>' 26 } 27 insert2 += ' </ul>' 28 insert2 += ' </div>' 29 } 30 //作ったhtmlを挿入 31 $(target2).append(insert2); 32 33 //csvを読み込む 34 $(document).ready(function(){ 35 //検索結果用 36 var csvfile = 'list.csv'; 37 $.get(csvfile, readCsv, 'text'); 38 39 $('input[name="no1"]').change(function() { 40 var val = $(this).val(); 41 if (val == 'テストA') { 42 var csvfile2 = 'form1.csv'; 43 $.get(csvfile2, readCsv, 'text'); 44 } else if (val == 'テストB') { 45 var csvfile2 = 'form2.csv'; 46 $.get(csvfile2, readCsv, 'text'); 47 } 48 $(".form").empty(); 49 }); 50 }); 51 52//読み込みが完了したら 53$(document).ajaxStop(function() { 54 55});//読み込みが終わったらここまで
・下記ページなどを参考に修正を試みましたが②のcsvの切り替えの記述がわからず断念
https://teratail.com/questions/183007
それぞれのcsvが正しく読まれるにはどのように修正しなければいけないのか、お分かりになれば教えてください。
回答1件
あなたの回答
tips
プレビュー