Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.01.2013, 17:44
Новичок на форуме
Отправить личное сообщение для michael_km Посмотреть профиль Найти все сообщения от michael_km
 
Регистрация: 18.01.2013
Сообщений: 6

undo / redo кнопки
Здравствуйте.
На сайте есть большая форма. Пользователь что-то вводит, что-то заполняет, но данные пока не отправляет. Как лучше реализовать кнопки undo / redo? Можете посоветовать уже готовые библиотеки?
Ответить с цитированием
  #2 (permalink)  
Старый 19.01.2013, 19:28
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,209

Сообщение от michael_km
Как лучше реализовать кнопки undo / redo?
Что они должны делать?
Ответить с цитированием
  #3 (permalink)  
Старый 21.01.2013, 11:38
Новичок на форуме
Отправить личное сообщение для michael_km Посмотреть профиль Найти все сообщения от michael_km
 
Регистрация: 18.01.2013
Сообщений: 6

Сообщение от ksa Посмотреть сообщение
Что они должны делать?
Близкое по аналогии с MS Word. Пользователь ввел тест в поле формы, нажал undo и текст исчез (или исчез последний сомвол), пользователь выбрал какой-то checkbox, нажал undo и checkbox стал не выбранным.
Ответить с цитированием
  #4 (permalink)  
Старый 21.01.2013, 13:54
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,209

michael_km, тогда придется запоминать и хранить всю "историю изменений", а по событию обрабатывать это и делать соответствующие изменения данных...
Ответить с цитированием
  #5 (permalink)  
Старый 21.01.2013, 16:20
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Ну наверно по Undo сохранять в Localstorage, в наращиваемый массив/стек(наверно в одном ключе)
Ответить с цитированием
  #6 (permalink)  
Старый 21.01.2013, 16:53
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

набросок на коленке за минутку.
приерно в этом ключе надо воять.


Собственно код+тест.
var store={
     //хранилище действий, сюда можно запихивать обьекты, функции, всё что душе угодно
     store:[],
     //позиция курсора
     count:0,
     //позицию курсора выше которой нельзя сдвинуться в redo
     maxcount:0,

     //сохраняем действие пользователя
     save:function(param){        
         alert('пользователь совершил действие: '+param);
       	 this.count++;
         this.maxcount=this.count;         
         this.store[this.count]=param;
     },
    
     // откат (false - значит что откатывать некуда)
     undo:function(){
       if (this.count>1){
         this.count--;
         return this.store[this.count];          
       } else return false;
     },

    // восстановление (false - значит что восстанавливать нечего, верхняя граница определяется по this.maxcount)
     redo:function(){
       if(this.count<this.maxcount){
         this.count++;
         return this.store[this.count];          
       }
       else return false;
     }
}

alert("false - значит что undo/redo не даст эфекта, в случае false нечего делать ненадо. В примере специально используются лишние undo и redo, для правдоподобной имитации пользователя" );
store.save('действие1');
store.save('действие2');
store.save('действие3');
store.save('действие4');      
      
alert('откат на '+store.undo());      
alert('откат на '+store.undo()); 
alert('откат на '+store.undo()); 
alert('откат на '+store.undo()); 
      
alert('востановлено '+store.redo());      
alert('востановлено '+store.redo()); 
alert('востановлено '+store.redo());      
alert('востановлено '+store.redo()); 
alert('востановлено '+store.redo());      
alert('востановлено '+store.redo()); 
      
      
alert('откат на '+store.undo());      
alert('откат на '+store.undo());      

store.save('2-1 действие');      
store.save('2-2 действие');                  
store.save('2-3 действие');      
store.save('2-4 действие');            
alert('откат на '+store.undo()); 
alert('откат на '+store.undo()); 
      
alert('востановлено '+store.redo());      
alert('востановлено '+store.redo());



в примере абстрактные данные- просто с строка с текстом,
ну а в вашем случае это быдет сериализованная форма.
ну или value изменённого поля, и ссылка на это поле
тогда value будет восстанавливаться для конкретного поля
Это будет выглядеть примерно так
$('input').change(function(){
    store.save({
        target:$(this),
        val:$(this).val()
    })
})

$('#undo').click(function(){
    var d=store.undo();
    d.target.val(d.val)
})
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 21.01.2013 в 17:24.
Ответить с цитированием
  #7 (permalink)  
Старый 23.01.2013, 15:22
Новичок на форуме
Отправить личное сообщение для michael_km Посмотреть профиль Найти все сообщения от michael_km
 
Регистрация: 18.01.2013
Сообщений: 6

Спасибо за наводку.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обновление события кнопки TheHappy Общие вопросы Javascript 0 06.03.2012 10:30
Получение ссылки на объект в обработчике нажатия кнопки pauluss ExtJS 1 22.06.2011 15:27
как изменить масштаб кнопки Taurus1195 Общие вопросы Javascript 12 19.05.2011 18:24
заменяю один текст другим через прозрачность. кнопки конфликтуют. plishas Events/DOM/Window 7 12.01.2011 21:34
цвет кнопки, цвет текста на кнопке, всплывающее окно matana Общие вопросы Javascript 8 26.05.2009 17:08