Я пытаюсь понять, как сохранять и загружать данные из таблиц с помощью файлов cookie.
Мне удалось сохранить данные в cookie, но функция загрузки не работает.
Есть идеи, как я могу заставить эту работу работать?
По сути, я хочу, чтобы cookie сохранял данные в таблице с помощью кнопки «Сохранить». Затем вы можете возиться с таблицей, и кнопка «загрузить» вернет ее к тому состоянию, в котором она выглядела при сохранении.
<html>
<head>
</head>
<body>
<table style = "width:100%" id = "myTable">
<tr>
<th>Col 1</th>
<th >Col 2</th>
<th >Col 3</th>
<th>Col 4</th>
</tr>
<tr>
<td contenteditable = "true" id = "left">-</td>
<td contenteditable = "true" id = "left">-</td>
<td contenteditable = "true">-</td>
<td>-</td>
</tr>
</table>
<p id = "paragraph">
</p>
<button type= "submit" class = "button" onclick = "addRow()">
Add Row
</button>
<button type= "submit" class = "button" onclick = "addCol()">
Add Col
</button>
<button type= "submit" class = "button" onclick = "saveTable()">
Save
</button>
<button type= "submit" class = "button" onclick = "LoadTable()">
Load
</button>
<script>
function addRow()
{
var table = document.getElementById("myTable");
var endOfRows = table.rows.length; // length of rows
var row = table.insertRow(endOfRows);
var endOfCols = table.rows[0].cells.length; // end of cols
for(var i = 0; i< endOfCols; i++)
{
var cell = row.insertCell(i);
cell.innerHTML = "-";
if ( i == endOfCols-1)
{
cell.contentEditable = "false";
}
else
{
cell.contentEditable = "true";
}
if (i > 1)
{
cell.style.textAlign = "right";
}
else
{
cell.style.textAlign = "left";
}
}
}
function addCol()
{
var table = document.getElementById("myTable");
var rowLength = table.rows.length;
var endOfCol = table.rows[0].cells.length;
for(var i = 0; i < rowLength; i++)
{
var firstRow = document.getElementById("myTable").rows[i];
var cell = firstRow.insertCell(endOfCol-1);
cell.contentEditable = "true"
if (i == 0)
{
cell.innerHTML = "-";
cell.style.textAlign = "center";
cell.style.backgroundColor = "black";
cell.style.color = "white";
cell.style.fontWeight = "600";
}
else
{
cell.innerHTML = "-";
}
}
}
function saveTable()
{
var table = document.getElementById("myTable");
var noOfRows = table.rows[0].cells.length; // amount of cols
var noOfCols = table.rows.length;
var data = '';
for(var i = 1; i < table.rows.length; i++)
{
for(var j = 0; j < table.rows[0].cells.length-1; j++)
{
data += table.rows[i].cells[j].innerHTML + ",";
}
}
setCookie("data", data, noOfCols, noOfRows, 60);
alert("Cookie Saved");
}
function setCookie(cname, cvalue, noOfRows, noOfCols, exdays) {
var d = new Date();
d.setTime(d.getTime() + (exdays*24*60*60*1000));
var expires = "expires = "+ d.toUTCString();
document.cookie = cname + " = " + cvalue +";" + expires + ";path=/";
}
function LoadTable()
{
var table = document.getElementById("myTable");
var rowLength = table.rows.length;
var endOfCol = table.rows[0].cells.length;
var data = getCookie("data");
var array = data.split(',');
var count = 0;
for(var i =1;i<rowLength;i++)
{
for(var j = 0; j < endOfCol-1; j++)
{
table.rows[i].cells[j].innerHTML = array[count];
count++;
}
}
}
function getCookie(cname)
{
var name = cname + " = ";
var decodedCookie = decodeURIComponent(document.cookie);
var ca = decodedCookie.split(';');
for(var i = 0; i < ca.length; i++)
{
var c = ca[i];
while (c.charAt(0) == ' ')
{
c = c.substring(1);
}
if (c.indexOf(name) == 0)
{
return c.substring(name.length, c.length);
}
}
return "";
}
PS. Мне нужно сделать это там, где последний столбец складывает числа из других столбцов в этой строке, поэтому мы хотим пропустить этот столбец при добавлении данных, а также не сохранять все, что находится в этой ячейке.
Да, я пытаюсь ответить на несколько вопросов, и этот не позволит мне использовать что-нибудь еще.
понял. вы знаете, как использовать инструменты разработчика вашего веб-браузера? например, установка точек останова в коде, пошаговое выполнение и проверка значений?
Я делаю. Но на самом деле я знаю, как загрузить таблицу, с которой у меня проблемы. Я не знаю, как это сделать.
хорошей отправной точкой было бы установить точку останова в вашем LoadTable, возможно, сразу после разделения, и посмотреть, правильно ли выглядит массив. Если это так, продолжайте движение вперед в цикл. если он выглядит неправильно, посмотрите дальше назад, чтобы увидеть, проблема ли это при сохранении файла cookie или проблема при чтении файла cookie.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы уверены, что хотите использовать cookie, а не localStorage? файлы cookie фактически отправляются вместе с любым веб-запросом, что увеличивает размер запроса. Также некоторые веб-серверы по умолчанию могут иметь проблемы с большими файлами cookie. Я знаю, что у IIS / .NET может быть эта проблема. Если вы храните сотни символов, вам может быть лучше с localStorage