js запоминание формы в cookies

Тема в разделе "Другие языки", создана пользователем o_nix, 5 дек 2010.

Статус темы:
Закрыта.
Модераторы: Цукер
  1. o_nix

    o_nix

    Регистр.:
    7 ноя 2007
    Сообщения:
    1.073
    Симпатии:
    1.037
    Задача позволить пользовотелю сохранять введённые им в форму данные чтобы при перезагрузке страницы ему не пришлось всё вбивать заново
    Нашёл вот такой вот примерчик который позволяет это сделать
    PHP:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">    
    <
    html>    
    <
    head>    
        <
    title>Form Session</title>    
    </
    head>    
    <
    body>    
    <
    script type="text/javascript">    
    <!--    
    /**    
    * Сохраняем форму. Функция принимает ссылку на форму. Форма должна иметь    
    * уникальный аттрибут ID.    
    */    
    function saveFormSession(form) {    
      if(!
    form||!form.id||!/^[^;=]+$/.test(form.id)) return;    
      var 
    data=""tokelsafe_name;    
      for(var 
    i=0i<form.elements.lengthi++) {    
        if((
    el=form.elements[i]).name==""||el.getAttribute("skip_form_save")!=null) continue;    
        
    safe_name=el.name.replace(/([)\\])/g"\\$1");    
        switch(
    el.type) {    
          case 
    "text":    
          case 
    "textarea"tok="v("+safe_name+"):"+el.value.replace(/([|\\])/g"\\$1")+"||"; break;    
          case 
    "radio":    
          case 
    "checkbox"tok="s("+safe_name+"):"+(el.checked"1""0")+"||"; break;    
          case 
    "select-one"tok="i("+safe_name+"):"+(el.selectedIndex)+"||"; break;    
          default: 
    tok="";    
        }    
        
    data+=tok;    
      }    
      if(
    data>=4000) return alert("Can't save form into cookie, to much data...");    
      
    document.cookie="ses"+form.id+"="+escape(data);
     
      return 
    true;
    }    
    /**    
    * Восстановить значение формы. Форма должна иметь уникальный атттрибут ID.    
    */    
    function restoreFormSession(form) {    
       if(!
    form||!form.id||!/^[^;=]+$/.test(form.id)) return false;    
       var 
    strtenddatanmdat;    
       if((
    strt=document.cookie.indexOf("ses"+form.id))<0) return false;    
       if((
    end=document.cookie.indexOf(";"strt form.id.length 3))<0end=document.cookie.length;    
       
    data=unescape(document.cookie.substring(strt form.id.length 4end)).split("||");    
       for(var 
    i=0i<data.length-1i++) {    
          
    nm=/^[vsi]\(((?:[^)\\]|(?:\\\))|(?:\\\\))+)\)\:/.exec(data[i]);    
          
    nm[1]=nm[1].replace(/\\([)\\])/g"$1");    
          
    dat=data[i].substr(nm[0].length).replace(/\\([|\\])/g"$1");    
          switch(
    data[i].charAt(0)) {    
            case 
    "v"form.elements[nm[1]].value=dat; break;    
            case 
    "s"form.elements[nm[1]].checked=(dat=="1"truefalse); break;    
            case 
    "i"form.elements[nm[1]].selectedIndex=dat; break;    
          }    
       }
     
       return 
    true;
    }    
    //-->    
    </script>    
    <!-- Пример использования -->    
    <form id="test1">    
    <input name="text1" type="text" /><br />
    <input name="text2" type="text" /><br />
    <input name="text3" type="text" /><br />
    <input name="text4" type="text" /><br />
    <input name="text5" type="text" /><br />
    <input name="text6" type="text" /><br />    
    <br />    
    <input type="button" onclick="saveFormSession(this.form)" value="Save form" />&nbsp;    
    <input type="button" onclick="restoreFormSession(this.form)" value="Restore form" />    
    </form>    
    </body>    
    </html>
    Вводим данные в инпуты жмём кнопку сохранить.
    обновляем страницу - введённых данных нет
    жмём восстановить - вводятся данные сохранённые в куках.
    всё нормально но почемуто функция восстановления введённых данных
    не восстанавливает форму если колличество элементов в ней изменилось

    тоесть открываем исходный код страницы и убираем input 3 например
    сохраняем обновляем страницу жмём кнопку восстановить
    восстанавливаются данные только до той формы которую удалили
    всё что идёт далее не восстанавливается - а мне это крайне необходимо тк у меня колличество элементов может изменятся самим пользовотелем

    в cookies данные сохраняются правильно с указанием уникального name элемента, такчто посути должно и восстанавливаться нормально но не работает
    видимо гдето в цикле нужно учесть чтобы при отсутствии элемента цикл продолжался дальше а не останавливался.

    Час уже мучаюсь никак не пойму где и что надо дописать.
    Помогите плиз ...

    ---------- Post added at 16:11 ---------- Previous post was at 14:54 ----------

    уж незнаю насколько криво но сделал - работает :D
    PHP:
            case "v":{ 
            if (
    form.elements[nm[1]]) {
            
    form.elements[nm[1]].value=dat; break;
    } else break;
            }
     
Статус темы:
Закрыта.