Удаление элементов списка с возможностью последующего восстановления
Наверное, каждый видел, что после удаления записи со стены ВКонтакте появляется ссылка для восстановления сообщения. Сегодня мы сделаем тоже самое с элементами списка.
Итак, вот список вещей, которые нам потребуются:
- Знание jQuery
- Плагин LiveQuery
- Удобный редактор
- Прямые руки
- Немного терпения
Для начала создадим заготовку. Создать
Теперь нужно повесить обработчик события нажатия элемента span. Это очень просто, и не должно вызвать у вас проблем.
var id = 0; //А это просто счетчик. Позже вы увидите, для чего он нужен
$("#add").click (function () { //Думаю, эта часть кода не требует комментариев
$("#list").append(" />/> Удалить");
id++;
});
Я решил просто брать элементы списка и сохранять их в массив. Добавим этот кусок кода:
var queue = new Array(); //В этом массиве будут храниться удалённые элементы Но тут есть подводные камни. Содержимое текстовых полей не сохраняется. Ничего страшного. Мы это легко исправим. //Эти функции сохраняют значения
$("textarea").livequery('change', function () { $(this).html($(this).val());
});
$("input[type='text']").livequery('change', function () { $(this).attr("value", $(this).val());
});
Теперь перейдём к удалению и восстановлению элементов. Это делается так: $(“span.delete”).livequery(‘click’, function () { /* Эта функция и будет выполнять процедуру удаления. Мы воспользовались плагином LiveQuery, чтобы облегчить себе труд.
*/ var html = $(this).parent().html();
//Это сама форма queue.push ({'html':html});
//Для хранения будем использовать формат JSON var num = queue.length;
$(this).parent().html("Восстановить");
$("span.restore").click (function () { //Вот мы и дошли до самого интересного
var num = $(this).attr("restore") * 1 - 1; //Вычисляем адрес формы
var parent = $(this).parent(); // Для удобства
parent.html(queue[num].html); // Восстанавливаем форму
});
});
Всё работает, всё замечательно. Мы добавили на страничку CKeditor, и после восстановления он не работает. А вот это уже не хорошо. Это еще один подводный камень. Но баг легко исправить. Просто перед сохранением формы удалите CKeditor совсем, а при восстановлении снова добавьте. вот все файлы, нужные для работы.