ローカルの掲示板作ってみました
ローカルストレージって興味はあったんだけどなかなか
最後にCSS
特にJSON状態でデータ格納できればかなり柔軟性が広がるし
格納したデータ表示を綺麗にできればそこそこ使えるかなぁと
んえ個別データ編集できれば多少なりとも使えそうだと・・・
と、その前にデータチェックをしっかりしろと。
はい。
手が出せていなくて。初心者にはハードルが高いかなと
思っていたら案外すんなりいけたので、ローカル掲示板なんか
組んでみました。
まずはHTML
<!DOCTYPE html> <html> <head> <title>localStorageのサンプル</title> <script src="http://code.jquery.com/jquery-2.0.0.min.js"></script> <script src="test2.js"></script> <link rel="stylesheet" href="test2.css" type="text/css"> </head> <body> <div id="form"> <input id="clearButton" type="button" value="全クリア"> <ul> <li class="name"> <label for = "name">名前</label> <input id="formName" type="text" size="20" maxlength="20" placeholder="氏名をここに入力してください。"> </li> <li class="post"> <label for = "post">投稿内容</label> <textarea id="formText" cols="50" rows="2" maxlength="100" placeholder="ここに投稿内容を入力してください。"></textarea> <input id="formButton" type="button" value="投稿する"> </li> </ul> </div> <div id="list"></div> </body> </html>
続いてJS
$(loaded); function loaded() { if(window.localStorage){ showText(); // ボタンをクリックしたときに実行するイベントを設定する $("#formButton").click( // コールバックとしてメソッドを引数にわたす function() { saveText(); showText(); }); }else{ alert("本アプリ未対応のブラウザです。対応ブラウザをご利用ください。"); } } //全クリアボタン挙動 $("#clearButton").click( function() { localStorage.clear(); showText(); }); // 入力された内容をローカルストレージに保存する function saveText() { // 時刻をキーにして入力されたテキストを保存する var name = $("#formName"); var text = $("#formText"); var time = new Date(); //投稿日時 var postdate = time.getFullYear()+ "/" + ( "0"+( time.getMonth()+1 ) ).slice(-2)+ "/" + ( "0"+time.getDate() ).slice(-2) + " " + ( "0"+time.getHours() ).slice(-2)+ ":" + ( "0"+time.getMinutes() ).slice(-2)+ ":" + ( "0"+time.getSeconds() ).slice(-2); var val = postdate +" " + name.val() +" " + text.val(); // 入力チェックをしてからローカルストレージに保存する if(checkText(val)) { localStorage.setItem(time, val); // テキストボックスを空にする name.val(""); text.val(""); } } // ローカルストレージに保存した値を再描画する function showText() { // すでにある要素を削除する var list = $("#list"); list.children().remove(); // ローカルストレージに保存された値すべてを要素に追加する var key, value, html = []; for(var i=localStorage.length-1; i>=0; i--) { key = localStorage.key(i); value = localStorage.getItem(key); // 表示する前にエスケープ html.push($("").html(escapeText(value))); } list.append(html); } // 文字をエスケープする function escapeText(text) { var TABLE_FOR_ESCAPE_HTML = { "&": "&", "\"": """, "<": "<", ">": ">" }; return text.replace(/[&"<>]/g, function(match) { return TABLE_FOR_ESCAPE_HTML[match]; }); } // 入力チェックを行う function checkText(text) { // 文字数が0または300以上は不可 if (0 === text.length || 120 < text.length) { alert("文字数は100字にしてください"); return false; } // すでに入力された値があれば不可 var length = localStorage.length; for (var i = 0; i < length; i++) { var key = localStorage.key(i); var value = localStorage.getItem(key); // 内容が一致するものがあるか比較 if (text === value) { alert("同じ内容は避けてください"); return false; } } // すべてのチェックを通過できれば可 return true; }
最後にCSS
ul li { list-style: none; } label { margin-right: 10px; width:80px; float: left; } .post{ position: relative; } #formButton { position: absolute; } #list{ bottom: 0 }
残課題
1.JSONの状態でローカルストレージに格納する。
2.格納したデータの表示を綺麗にする
3.個別のデータの削除や編集をできる様にする。
4.通信状態を見て通信できていたらDBに書き込みする。
特にJSON状態でデータ格納できればかなり柔軟性が広がるし
格納したデータ表示を綺麗にできればそこそこ使えるかなぁと
んえ個別データ編集できれば多少なりとも使えそうだと・・・
と、その前にデータチェックをしっかりしろと。
はい。
コメント