
こんにちは、
初心者で色々なサイトを参考に作成しているのですが、どれもうまくいかず、助けて下さい。
phpとjavascriptをを用いて
csvを読み込みし、csvから連動したプルダウンを作りたいです。
例えば、csv からプルダウンにて
都道府県を選択し
その都道府県の中から市町村を選択すると
何曜日が来場可能かが選択できるようにしたいのです。
test.csv
1,東京都,江戸川区,月曜日
1,東京都,江戸川区,火曜日
1,東京都,練馬区,水曜日
1,東京都,練馬区,木曜日
2,埼玉県,川口市,金曜日
2,埼玉県,川口市,土曜日
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
こんにちは
検索すれば、いろいろ見つかると思いますし、「セレクトの連動」はさほど特殊な例ではないので、ライブラリ化したものもいろいろあるようです。
(少し旧い例ですが)
https://mars-2.hatenadiary.org/entries/2007/11/09
https://nodoame.net/archives/4593
phpからhtmlを出力しているのなら、データを直接スクリプト内に書き出しても良いですし、別ファイルにする場合は、js形式にしておけばscriptタグでそのまま読み込むことが可能です。
テキストファイルのままの場合は、HttpRequestで読み込むことも可能ではあります。
条件が不明なので、以下に、スクリプトから読み込む簡単な例を。
・テキストデータの1項目目の意味が不明ですが、とりあえずそのまま。
・データは、ご提示の形式(カンマ区切りクォーテーションなし)で、
htmlと同じフォルダにあると仮定。
・データチェックは行っていません。整合のとれたデータが前提です。
・同期読込みにしてしまいましたが、「非推奨」になったようなので、
非同期に書き換えた方が宜しいかも知れません。
以下ご参考までに。
<!DOCTYPE HTML>
<html lang="ja">
<head><title>Sample</title>
<style>
#hoge select{ width: 8em; margin-right: 2em; }
</style>
</head>
<body>
<form id="hoge">
<select name="select1"></select>
<select name="select2"></select>
<select name="select3"></select>
</form>
<script>
const req = new XMLHttpRequest();
req.open('GET', './test.csv', false);
req.send();
const data = req.responseText.replaceAll('\r','').
split('\n').map(d => d.split(',')).filter(d => d.length>1);
const S = {
elms: [...document.querySelectorAll('#hoge select')],
clear: m => { S.elms[m].innerHTML = "" },
choose: m => {
const c = {}, sVal = S.elms.map( e => e.value );
data.forEach( d => {
let f = true;
for( let i = 1; i <= m; i++) if(d[i] != sVal[i - 1]) f = false;
if(f) c[d[m+1]] = 1;
});
return c;
},
set: m => {
S.clear(m);
for( const k in S.choose(m)){
const opt = `<option value="${k}">${k}</option>`;
S.elms[m].insertAdjacentHTML('beforeend', opt);
}
if(m+1 < S.elms.length) S.set(m+1);
}
};
S.set(0);
document.getElementById('hoge').addEventListener('change', e => {
const m = S.elms.indexOf(e.target);
if(m>-1 && m+1 < S.elms.length) S.set(m + 1);
});
</script>
</body>
</html>
ありがとうございます。
セレクト連動はいただいたURLは存じておりました。
すでにできてはいたのですが、
PHPやjavascriptの知識がない方がcsvで編集してきたものを
いただくので、いちいち変更するのが面倒で、直接できないものかと
考えていました。
上記で動かしてみましたが、うまくいかず、いろいろ試してみます。
ありがとうございました。
No.1
- 回答日時:
範囲名を付けた場所に読み込むようにすれば良いだけだと思うんだけど...。
あと、プルダウンというよりも、フィルタ処理のほうが適切な気がする。
オートフィルタを設定すれば良いんじゃないかな。
先頭行で表示する値を選択するだけです。
複数選択できるので、場合によっては
「東京」「江戸川区または中野区または新宿区」
なんて使い方で絞り込みもできる。
ありがとうございます。
今後増えたり減ったりするので、フィルターだと知識がある人じゃないとなおせないかなと考え、csvからできないかなと考えていたところです。
もう少しがんばってみます
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【javascript・PHP】プルダウン...
-
Selectボックスの幅を自動で広...
-
return trueとreturn falseの用...
-
javaScriptの変数をJavaの変数...
-
<input>の選択肢をプルダウンメ...
-
onchangeイベントを強制的に発...
-
Formのシリアライズができない
-
【jQuery】input nameの文字列...
-
至急!GetElementById でtdの...
-
データベースの値を判断してラ...
-
ラジオボタンが選択されたらテ...
-
innerHTML内では改行は禁止?
-
confirm()で表示したダイアログ...
-
Javascript ポップアップウィ...
-
複数のチェックボックス項目が...
-
Javascriptに条件分布ついて(再)
-
JavaScriptでテーブルの行入れ替え
-
チェックボックスのON/OFFでVal...
-
submit関数の使い方
-
テーブルのセル数取得
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CSVファイルを読みこみ、プルダ...
-
Selectボックスの幅を自動で広...
-
セレクトを全て選択されていな...
-
プルダウン 項目が多いので先頭...
-
Selectの中身をfor文で入れる
-
【javascript・PHP】プルダウン...
-
onFocusOutが複数回呼ばれる!
-
jQuery セレクトボックスで選択...
-
JQuery selectが反映されない
-
javascriptでselectボックスの<...
-
onchange等のイベントハンドラ...
-
現在時刻を取得してフォームのs...
-
selectメニューのselectedの位...
-
フォームで開始時間と終了時間...
-
JavaScriptで特定csvファイルを...
-
ブラウザの戻るボタンを押した...
-
UWSCのIE操作でプルダウンを選...
-
リストボックスの項目の順番を...
-
<textarea>にプルダウンを表示...
-
JavaScriptでプルダウンのサイ...
おすすめ情報