ユーザーがテーブルの列全体で特定の入力を変更することができる、毎日のイベント用のパブリック編集可能なログを作成中です。 、Time、Checkbox、User Notesなどがありますが、最初の列「Day」はハードコードされています(「Day 1」、「Day 2」など)。関連する方法でJSONから複数のKEY:VALUEペアを抽出する方法
var $TABLE = $('#table');
var $SAVEIT = $('#save-btn');
$SAVEIT.click(function() {
var $rows = $TABLE.find('tr:not(:hidden)');
var headers = [];
var data = [];
var VALue = [];
var keeey = "uSTORE-A";
var SETData = function(keeey, VALue) {
if (!keeey || !VALue) {return;}
localStorage.setItem(keeey, VALue);
alert("DATA SAVED! \nYou may now close your browser.");
};
// Get the headers (add special header logic here)
$($rows.shift()).find('th:not(:empty)').each(function() {
headers.push($(this).text().toLowerCase());
});
// Turn all existing rows into a loopable array
$rows.each(function() {
var $td = $(this).find('td');
var h = {};
// Use the headers from earlier to name our hash keys
headers.forEach(function (header, i) {
h[header] = $td.eq(i).text();
});
data.push(h);
});
var uSAVE = JSON.stringify(data);
SETData("uSTORE-B", uSAVE);
});
をその後、そのようなより多くのロギングのための次の日のよう:
<div id="table" class="table-editable table-responsive table-bordered">
<span class="table-add glyphicon glyphicon-plus"></span>
<table class="table">
<tr class="warning">
<th>Day</th>
<th>Date</th>
<th>Time</th>
<th>Yes/No</th>
<th>Notes</th>
</tr>
<tr class="active">
<td contenteditable="true">Day 1</td>
<td contenteditable="true"><input id="date1" value="" type="date" name="date" onblur="dateConstruct(1)"></td>
<td contenteditable="true"><input id="time1" value="" type="time" name="usr_time" onblur="timeConstruct(1)"></td>
<td contenteditable="true">Y <input class="radioBut" type="checkbox" name="1" value="Yes">/N <input class="radioBut" type="checkbox" name="2" value="No"></td>
<td contenteditable="true"><input id="note1" value="" type="text" name="notes" onblur="noteConstruct(1)"></td>
<td>
<span class="table-remove glyphicon glyphicon-remove"></span>
</td>
</tr>
<tr class="active">
<td contenteditable="true">Day 2</td>
<td contenteditable="true"><input id="date2" value="" type="date" name="date" onblur="dateConstruct(2)"></td>
<td contenteditable="true"><input id="time2" value="" type="time" name="usr_time" onblur="timeConstruct(2)"></td>
<td contenteditable="true">Y <input class="radioBut" type="checkbox" name="1" value="Yes">/N <input class="radioBut" type="checkbox" name="2" value="No"></td>
<td contenteditable="true"><input id="note2" value="" type="text" name="notes" onblur="noteConstruct(2)"></td>
<td>
<span class="table-remove glyphicon glyphicon-remove"></span>
</td>
</tr>
</table>
</div>
これは私が正常に動作し、データを保存するために使用するコードは次のとおりです。ここに私の現在のテーブルのスタイルのサンプルがありますこのコードを使用して、ローカルストレージのブラウザに保存されているJSONから以前に保存したデータを読み込むことができます。
[{"day":"Day 1","date":"2017-02-24","time":"12:01","yes/no":"Y","notes":"Some notes"},{"day":"Day 2","date":"2017-02-25","time":"06:06","yes/no":"Y","notes":"Another day's notes"},{"day":"Day 3","date":"2017-02-26","time":"","yes/no":"N","notes":""},{"day":"Day 4","date":"2017-02-27","time":"22:00","yes/no":"Y","notes":"Notes for day after no notes"}]
このように、私のように(データを保存することができる午前:保存したJSONは(私は、ペンテストの目的のために、「警告()」を介して自分自身に表示されていた)、このようになります。 JSON)とデータのロード(JSONとして)の両方を正しく実行できます。しかし、私は以前に保存されたユーザーのデータでテーブルを再生成する方法を見つけることができませんでした。言い換えれば、JSON Key:Valueの値をTableに入力して、ユーザーが中断したところから取り出せるようにする方法がわかりません。私はいくつかの方法を試しましたが、最初のKey:Value Pairで終わって、別々の値を循環するのではなく、列のすべての値を入力します。 JSONを別の方法で保存する必要がありますか?
ありがとうございました。提供できる可能性のあるヘルプや、正しい方向に向いている指をありがとうございます。
マーティにJSONデータをプッシュする必要があるように、私は私が使用していますテーブルのレイアウトを追加しました見えます私の質問。私はあなたのコードを試して、私のコーディングの状況に必要な変更を加えましたが、まだ問題があるようです。コードは0のJavascriptエラーをスローしていますが、コードは(ボタンをクリックすると)保存されたJSONデータのテーブルの値を入力していません。助言がありますか? –
あなたのテーブル構造を含めるために投稿を編集しました。 – Marty
ありがとう、マーティー!これは今や軌道に乗っている。私が(値を埋めることに失敗したことに関連して)他の問題が発生していたように見えるのは、あなたのコードがどこにあるのかに先立ってJSONデータをどのように解析していたのか、私自身の誤りでした。私はstringifyメソッドを誤って使用していました(私がJSONデータを 'alert();で表示していたときから)。おっとっと!しかし、私は 'var uSTORElogD = localStorage.getItem(" uSTORE-SSI-a ");を使用しています。 var uSTORElog1 = $ .parseJSON(uSTORElogD); 'は、私が計画していた通りに動作します。 –