htmlのラジオボタンの値をjavaのみでファイル出力
ラジオボタンの値をテキストファイルやcsvファイルなどに保存し,解析しやすくしたいと思って調べた.
phpのコードを別に用意せずに簡潔にjavascriptだけでできないかなーと思って書いたのでメモ.
ちなみに恥ずかしながら初めてjavascript書きました...
結論から先に
- phpを経由せずにjavascriptでのみでできました
- ファイル名指定やローカルへの直接保存はできず..
- リンク先から拡張子なしでダウンロードすることはできました
- javascriptで配列の値を直接受け取って出力することもできる
html側
<a id="myDownload" href="#">Click here to download.</a>
var $id = function(id) { return document.getElementById(id); } window.onload = function() { $id("myDownload").addEventListener("click", function(){ var href = "data:application/octet-stream,"; var value = 1; // value to be output href = encodeURIComponent(value); this.setAttribute("href", href); }, false); }
ただ,フォームを作っていると,ページを切り替えながら複数の回答を取得した配列値を同一ファイルに保存したくなることは結構あると思います.
その場合でもphpに値を渡さず,javaの配列に格納した値を直接ファイル出力することができます.
こんなかんじ
html側
<div id = "myForm"> <!-- radio buttons --> <p> <input type="radio" id=5 value="5" name="rate" onclick="cl(4)"> 5 <br> <input type="radio" id=4 value="4" name="rate" onclick="cl(3)"> 4 <br> <input type="radio" id=3 value="3" name="rate" onclick="cl(2)"> 3 <br> <input type="radio" id=2 value="2" name="rate" onclick="cl(1)"> 2 <br> <input type="radio" id=1 value="1" name="rate" onclick="cl(0)"> 1 <br> <p> <!-- submit button --> <button type="submit" name="myButton" value="test" onClick="mySubmit();"> Submit score <br> </div> <a id="myDownload" href="#">Click here to download.</a>
java側
document.getElementById("myDownload").style.display = "none"; // hide download link ScoreData = new Array(-1, -1, -1); count = 0; if(count == 3) { document.getElementById("myDownload").style.display = "block"; // show download link } function mySubmit() { var rates = document.getElementsByName("rate"); var rate_value; for(var i = 0; i < rates.length; i++){ if(rates[i].checked){ rate_value = rates[i].value; } } ScoreData[ count ] = rate_value; document.getElementsByName("rate")[rate_value-1].checked = false; count++; }