Lockal Storage и Chrom
Здравствуйте!
Такой вопрос, сохранение работает в Мозиле, но не работает в Chrom и в Opere, почему? что может быть не так? Cпасибо
<table>
<tr><th scope="col">Nazwę</th>
<th scope="col" >Opis</th>
<th scope="col"> </th>
</tr>
<tr>
<td>
<label>
<input type="text" name="text" ">
</label>
</td>
<td>
<label>
<input type="text" name="text" ">
</label>
</td>
</div>
<div class="item_box">
</tr>
<tr>
<td>
<label>
<input type="text" name="text" ">
</label>
</td>
<td>
<label>
<input type="text" name="text" ">
</label>
</td>
</div>
<div class="item_box">
</tr>
<tr>
<td>
<label>
<input type="text" name="text" ">
</label>
</td>
<td>
<label>
<input type="text" name="text" ">
</label>
</td>
</div>
<div class="item_box">
</tr>
<tr><td>
<label>
<input type="text" name="text" ">
</label>
</td>
<td>
<label>
<input type="text" name="text" ">
</label>
</td>
</div>
<div class="item_box">
</tr>
<tr>
<td>
<label>
<input type="text" name="text" ">
</label>
</td>
<td>
<label>
<input type="text" name="text" ">
</label>
</td>
</div>
<div class="item_box">
</tr>
<tr> <td>
<label>
<input type="text" name="text" ">
</label>
</td>
<td>
<label>
<input type="text" name="text" ">
</label>
</td>
</div>
<div class="item_box">
</tr>
<tr>
<td>
<label>
<input type="text" name="text" ">
</label>
</td>
<td>
<label>
<input type="text" name="text" ">
</label>
</td>
</div>
<div class="item_box">
</tr>
<tr><td>
<label>
<input type="text" name="text" ">
</label>
</td>
<td>
<label>
<input type="text" name="text" ">
</label>
</td>
</div>
<div class="item_box">
</tr>
<tr>
<td>
<label>
<input type="text" name="text" ">
</label>
</td>
<td>
<label>
<input type="text" name="text" ">
</label>
</td>
</div>
<div class="item_box">
</tr>
<div id="cart_content"></div>
</div>
</table>
</body>
let div = document.getElementById('div');
div.addEventListener('click', changeValue);
div.addEventListener('blur', changeEnd);
function changeValue(event){
let target = event.target;
target.setAttribute('contenteditable', true);
}
function changeEnd(){
div.removeAttribute('contenteditable');
console.log(div.innerText)
}
// Получаем данные из LocalStorage
function getCartData(){
return JSON.parse(localStorage.getItem('cart'));
}
// Записываем данные в LocalStorage
function setCartData(o){
localStorage.setItem('cart', JSON.stringify(o));
return false;
</script>
|
Цитата:
|
с разрешения, покажу свою логику поиска проблемы:
1. понял я, как посмотреть в браузерах хранилище и ключи, код упростил до только сохранить и вернуть
localStorage.setItem('div',changeValue);
localStorage.getItem('div ');
Но вопрос вот происходит у меня событие ( смысл всего, в ячейки таблицы писать текст и чтобы не пропадал). Значения события у меня - changeValue, но почему не сохраняет значение - я уже перепробовал вообще все названия блоков от input до просто table По моему мнению - раз все события происходят в главном блоке с id номером - div (уже думал путаница из-за имени, тоже менял) - там по клику мышки активируется возможность интерактивной ячейки и происходит событие, то чтобы текущую надпись запомнить - localStorage.setItem('div',changeValue); но это все снова работает только в Мозиле, или так вообще нельзя делать? ps я пока сам не понимаю, каким местом, читаю инструкцию - записать, показать вижу, а - что сохраняем, и значение его - а толку - видите |
Konstantin47,
структуру таблицы неплохо бы исправить, выкинуть все div или переместить их в ячейки td. |
|
Рони, спасибо большое!
|
<body>
<table id='div'>
<tr>
<th scope="col">Nazwę</th>
<th scope="col" >Opis</th>
<th scope="col"> </th>
</tr>
<tr>
<td>1234</td>
<td>1234</td>
<td>1234</td>
</tr>
<tr>
<td>1234</td>
<td>1234</td>
<td>1234</td>
</tr>
<tr>
<td>1234</td>
<td>1234</td>
<td>1234</td>
</tr>
</table>
почти по примеру сделал таблицу хорошо, а в таком случае - key для сохранения - ячейка или td будет? мне, чтоб хоть одно точное значение знать с моим старым кодом, точно также не работает |
Konstantin47,
не понимаю что вы пишите, ни код, ни описание, могу только гадать, что вы хотите сделать. |
щас
<body>
<table id='div'>
<tr>
<th scope="col">Nazwę</th>
<th scope="col" >Opis</th>
<th scope="col"> </th>
</tr>
<tr>
<td>1234</td>
<td>1234</td>
<td>1234</td>
</tr>
<tr>
<td>1234</td>
<td>1234</td>
<td>1234</td>
</tr>
<tr>
<td>1234</td>
<td>1234</td>
<td>1234</td>
</tr>
</table>
</body>
let div = document.getElementById('div');
div.addEventListener('click', changeValue);
div.addEventListener('blur', changeEnd);
console.log(div);
function changeValue(event){
let target = event.target;
target.setAttribute('contenteditable', true);
}
function changeEnd(){
div.removeAttribute('contenteditable');
console.log(div.innerText)
}
localStorage.setItem('div',changeValue);
localStorage.getItem('div');
Если запустить будет, похоже, как у вас - таблица с активными ячейками Cейчас хочу только, чтоб сохраняло данные LokalStorage в ячейках (все, что показывал выше работало только в Мазиле) |
Вы чего сохранить то пытаетесь?
localStorage.setItem('div',changeValue); - это вы саму функцию туда пытаетесь засунуть. Она конечно как то в строку преобразуется вот в таком виде "function changeValue(event){ let target = event.target; target.setAttribute('contenteditable', true); }" Но это явно не то, что вам надо. |
если честно, сохранить, то что будет введено в ячейку
|
localStorage.setItem('div', '1234567');
alert (localStorage.getItem('div'));
Прекрасно работает и в Хроме и в Файрфоксе. |
сохранение и редактирование содержимого ячеек таблицы js
Konstantin47,
двойной клик по ячейке, вход/выход из режима редактирования. начальные данные указать в массиве arr и придумать любое новое имя. пример tableEditor(tbody, arr, 'test') строка 67
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
</style>
</head>
<body>
<table id="table">
<thead>
<tr>
<th scope="col">Nazwę</th>
<th scope="col" >Opis</th>
<th scope="col"> </th>
</tr>
</thead>
<tbody>
</tbody>
</table>
<script>
const tableEditor = (tbody, arr = [], localName = "tds") => {
if (localStorage[localName]) arr = JSON.parse(localStorage.getItem(localName));
let container = document.createDocumentFragment();
arr.forEach((ar, j) => {
let tr = document.createElement("tr");
for (let txt of ar) {
let td = document.createElement("td");
td.innerHTML = txt;
td.dataset.j = j;
tr.append(td)
}
container.append(tr)
});
tbody.append(container);
let input = document.createElement("input");
tbody.addEventListener("dblclick", ({
target
}) => {
if (input.parentNode) {
let td = input.parentNode;
let i = td.cellIndex;
let j = td.dataset.j;
input.remove();
td.textContent = arr[j][i] = input.value;
localStorage.setItem(localName, JSON.stringify(arr));
}
if (target.tagName == "TD") {
input.value = target.textContent;
target.textContent = "";
target.append(input)
}
}, true);
}
let arr = [
[1234, 1234],
[1234, 1234]
];
let tbody = document.querySelector("#table tbody");
tableEditor(tbody, arr, "tdd")
</script>
</body>
</html>
|
Как то так попробуйте
<body>
<table id='div'>
<tr>
<th scope="col">Nazwę</th>
<th scope="col" >Opis</th>
<th scope="col"> </th>
</tr>
<tr>
<td>1234</td>
<td>1234</td>
<td>1234</td>
</tr>
<tr>
<td>1234</td>
<td>1234</td>
<td>1234</td>
</tr>
<tr>
<td>1234</td>
<td>1234</td>
<td>1234</td>
</tr>
</table>
<script>
let div = document.getElementById('div');
div.addEventListener('click', changeValue);
div.addEventListener('focusout', changeEnd);
function changeValue(event){
event.target.setAttribute('contenteditable', true);
}
function changeEnd(event){
event.target.removeAttribute('contenteditable');
console.log(event.target.innerText)
setValues ()
}
function setValues () {
const tbd = document.getElementById('div').tBodies[0];
const rws = tbd.rows;
const v = [];
for (let i=0; i<rws.length; i++) {
const cls= rws[i].cells;
const cv = []
for (let j=0; j<cls.length; j++) {
cv.push(cls[j].textContent);
}
v.push(cv);
}
localStorage.setItem('tblvalues',JSON.stringify(v));
console.log(localStorage.getItem('tblvalues'))
}
function restoreValues () {
const tbd = document.getElementById('div').tBodies[0];
const rws = tbd.rows;
let tbv = localStorage.getItem('tblvalues')
if (!tbv) return
const v = JSON.parse(tbv);
for (let i=0; i<rws.length; i++) {
const cls= rws[i].cells;
for (let j=0; j<cls.length; j++) {
cls[j].textContent = v[i][j];
}
}
}
restoreValues ()
</script>
</body>
|
Цитата:
Я, если честно, не понимал до таких примеров, откуда вообще брать условия и циклы для сохранения. сам абзац про JS LokalStorage c очень разных источников пересмотрел и только сами функции понял 9 сохранить, достать, удалить), а циклы... Может подскажите - какой-то ресурс, с задачами и примерами решений? жизненными, вот, как активация форм input html, проверка паролей ,что именно в задачах с сайтами используется ps то что связано с математикой и console.Log - я могу и степени и корни и всякие формулы посчитать, а такие же задачи, они совсем другие и я просто не понимаю, с какой стороны подходить. Спасибо огромное за помощь! |
| Часовой пояс GMT +3, время: 09:05. |