@zeni1agent

Проблема с сохранением изменений в Stickies?

Я пытаюсь создать инструмент для сохранения на страничке заметок
И у меня есть во такой код
Взял я его из этого туториала
<!DOCTYPE html>
<html>
<head>
  <meta charset='utf-8' />
  <title>HTML 5 complete</title>
	<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
	<link rel="stylesheet" href="/resources/demos/style.css">
	
	<link rel="stylesheet" href="default.css" />
	<link rel="stylesheet" href="stickies/stickies.css" />
	 
</head>
<body>
<article>
<img src="1.jpg">
</article>

<div id="hint-add"></div>
<div id="hint-container"></div>
 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/jquery-ui.min.js"></script>
<script src="stickies/stickies.js"></script> 
<script> STICKIES.open(); </script>
	
<script type="text/javascript">
document.write('<form name="form1" method="POST"><textarea name="js_exp_php_ise" class="note_textarea_ise"><div  class="note_div_ise">');
	youf.forEach(function(element) { 
	document.write(element );
});
document.write('</div></textarea><input type="submit" value="Отправить"></form>');
</script>	
<?php if ($_POST ['js_exp_php_ise']){ echo $_POST ['js_exp_php_ise']; } ?>
</body>
</html>


stickies.js

var youf = [];
var STICKIES = (function () {
 var initStickies = function () {
		$("<div />", { 
			text : "+", 
			"class" : "add-sticky",
			click : function () { createSticky(); }
		}).prependTo(document.getElementById( 'hint-add')); 
		initStickies = null; 
 },
 openStickies = function () {
	 	initStickies && initStickies(); 
		for (var i = 0; i < localStorage.length; i++) {
			createSticky(JSON.parse(localStorage.getItem(localStorage.key(i))));
		}
 },
 createSticky = function (data) { 
	 	data = data || { id : +new Date(), top : "40px", left : "40px", text : "Note Here", width: '100px', height: '100px'}		
	 var content_zametki =  $("<div />", { 
			"class" : "sticky",
			'id' : data.id
			 })
		.prepend($("<div />", { "class" : "sticky-header"} )		
				.append($("<span />", { 
					"class" : "sticky-status", 
					text : "status",
					click : saveSticky 
				}))
				.append($("<span />", { 
					"class" : "close-sticky", 
					text : "Х", 
					click : function () { deleteSticky($(this).parents(".sticky").attr("id")); }
				})))
			.append($("<div />", { 
				html : data.text, 
				contentEditable : true, 
				"class" : "sticky-content", 
				keypress : markUnsaved
 			})).resizable({				
			handle : "div.sticky-content", 
			stack : ".sticky",
			start : markUnsaved,
			stop  : saveSticky	
			})			
		.draggable({
			handle : "div.sticky-header", 
			stack : ".sticky",
			start : markUnsaved,
			stop  : saveSticky	
		 })
		.css({
			position: "absolute",
			"top" : data.top,
			"left": data.left,
			"width" : data.width,
			"height" : data.height		
		})
		.focusout(saveSticky)  ;			  
		content_zametki.appendTo(document.getElementById( 'hint-container'));
		
	var allHTML = $('<div>').append(content_zametki.clone()).html();
	youf.push(allHTML);	 
},
deleteSticky = function (id) {
	 localStorage.removeItem("sticky-" + id);
		$("#" + id).fadeOut(200, function () { $(this).remove(); }); 
 },
 saveSticky   = function () { 
	 var that = $(this),  sticky = (that.hasClass("sticky-status") || that.hasClass("sticky-content")) ? that.parents('div.sticky'): that,
				obj = {
					id  : sticky.attr("id"),
					top : sticky.css("top"),
					left: sticky.css("left"),
					width : sticky.css("width"),
					height: sticky.css("height"),
					text: sticky.children(".sticky-content").html()}			
		localStorage.setItem("sticky-" + obj.id, JSON.stringify(obj));	
		sticky.find(".sticky-status").text("saved"); 
 },
 markUnsaved  = function () {
	 var that = $(this), sticky = that.hasClass("sticky-content") ? that.parents("div.sticky") : that;
		sticky.find(".sticky-status").text("unsaved");
};
return {
 open   : openStickies,
 init   : initStickies
};
}());

Проблема заключается в том что через некоторое время пользования на страничке появляются три заметки которые невозможно удалить а новые не сохраняются
Раньше это было только в хроме но после и опера начала вести себя точно так же. Я проверил на фаерфоксе и там пока что все работает нормально но как мне кажется через время и он будет выдавать мне точно такой же баг
Я подозреваю что проблема в том что он сохраняет его в хранилище HTML5 и из за бага перестает его обновлять
при удалений saveSticky три лишних Stickies пропадают
есть ли у кого совет как решить данную проблему?

В дальнейшем я буду его хранить в метополе поста на php.
Поэтому подойдут любые решения как динамически можно сохранить(перебросить)
Всю информацию в $_POST

Вот пример кода на codepen
  • Вопрос задан
  • 41 просмотр
Решения вопроса 1
@zeni1agent Автор вопроса
Вроде бы я решил проблему с помощью замены localStorage на sessionStorage. Но пока сказать точно не могу буду проверять.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
25 нояб. 2024, в 15:52
3000 руб./за проект
25 нояб. 2024, в 15:43
1500 руб./за проект