Показать сообщение отдельно
  #1 (permalink)  
Старый 01.11.2009, 17:42
Новичок на форуме
Отправить личное сообщение для user1980 Посмотреть профиль Найти все сообщения от user1980
 
Регистрация: 25.10.2009
Сообщений: 2

Скрипт не дружит с onLoad
Имеется следующий скрипт (не мой, взятый с другого источника), для сохранения данных полей формы в куки.
<!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="", tok, el, safe_name;
  for(var i=0; i<form.elements.length; i++) {
    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);
}

/**
* Восстановить значение формы. Форма должна иметь уникальный атттрибут ID.
*/
function restoreFormSession(form) {
   if(!form||!form.id||!/^[^;=]+$/.test(form.id)) return false;
   var strt, end, data, nm, dat;
   if((strt=document.cookie.indexOf("ses"+form.id))<0) return false;
   if((end=document.cookie.indexOf(";", strt + form.id.length + 3))<0) end=document.cookie.length;
   data=unescape(document.cookie.substring(strt + form.id.length + 4, end)).split("||");
   for(var i=0; i<data.length-1; i++) {
      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"? true: false); break;
        case "i": form.elements[nm[1]].selectedIndex=dat; break;
      }
   }
}
//-->
</script>

<!-- Пример использования -->
<form id="test1">
<input name="text[0]" type="text" /><br />
<input name="skiped" type="text" skip_form_save="true" /><br />
<input name="pass" type="password" /><br />
<input name="radio" type="radio" /><br />
<input name="check" type="checkbox" /><br />
<textarea name="txt"></textarea><br />
<select name="sel">
<option selected="selected">Test1</option>
<option>Test2</option>
<option>Test3</option>
</select><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>


в моем случае желательно, восстановление данных при загрузке страницы, т.е вызвать функцию, для восстановления (restoreFormSession(this.form)) не через onClick, а через

<BODY onLoad="restoreFormSession(this)">

По сути все должно работать, но на деле такая связка не функционирует.
Подскажите пожалуйста, каким образом возможно сделать вышесказанное (либо какие ошибки имеются). Буду крайне признателен за Вашу помощь.

P.S. Да, если кому нужно, первоисточник скрипта http://forum.vingrad.ru/forum/topic-...2010323/0.html
Ответить с цитированием