フォームのエレメントの値をクッキーに保存して、リロードしたときに設定する。しかも自動?

下のものを新しくした。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Script-Type" content="application/javascript">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>TEST</title>

<style type="text/css">

</style>
</head>

<body>
<form action="#">
<p>
<input type="text" name="aa">
<input type="text" name="bb">
<input type="text" name="cc">
</p>
</form>

<script type="text/javascript">

// name で指定された Input要素の状態を、cookieを利用して維持する。
// select の multiple には、未対応。
//@cc_on

var FormElementsKeeper = function ( keepDay /*, target0 [, target1, ..] */ ) {


  var setCookie = function ( name, value, day, path, domain ) {
    var d = new Date;
    d.setDate( d.getDate() + day );
    return document.cookie = encodeURIComponent( name ) + '=' + encodeURIComponent( value ) +
      '; ' + 'expires=' + d.toUTCString( ) +
      '; ' + ( path ? 'path=' + encodeURI( path ) + '; ': '' ) +
      (domain ? 'domain=' + encodeURI ( domain ) + '; ': '' );
  };

  
  var getCookie = function ( name ) {
    name = encodeURIComponent( name ).replace( /([.*()]) /g, '\\$1' );
    var v = document.cookie.match( RegExp( name + '\\s*=\\s*(.*?)(?:[\\s;,]|$)' ) );
    return v ? decodeURIComponent( v[1] ): null;
  };


  var setState =  function ( inpName, value ) {
    var d = document;
    var counter = 0;
    var elements = d.getElementsByName( inpName ) || [ d.getElementById( inpName ) ];
    var e;
    
    while( e = elements[ counter++ ] ) {

      switch( e.type ) {

        case 'hidden' : case 'submit': case 'text':  
        case 'button' : case 'reset' : case 'textarea':
          e.value = value;
          break;

        case 'checkbox': case'radio':
          e.checked = e.value == value;
          break;

        case 'select-one': // valueは必須
          var cnt = 0, o;

          while( o = e.options[ cnt++ ] )
            if( o.value == value ) o.selected = true;
          break;

        default:
      }
    }
  };
  
  
  var getState = function ( inpName ) {
    var d = document;
    var counter = 0;
    var elements = d.getElementsByName( inpName ) || [ d.getElementById( inpName ) ];
    var e;
    
    while( e = elements[ counter++ ] ) {
      switch( e.type ) {

        case 'hidden' : case 'submit': case 'text':  
        case 'button' : case 'reset' : case 'textarea':
          return e.value;
          break;

        case 'checkbox': case'radio':
          if( e.checked ) return e.value;
          break;

        case 'select-one': // case 'select-multiple':
          var cnt = 0, o;

          while( o = e.options[ cnt++ ] )
            if( o.selected ) return e.value;
          break;

        default:
      }
    }
    return null;
  };


  var listener = function ( evt ) {
    var e  = evt./*@if( @_jscript ) srcElement @else@*/ target /*@end@*/;
    var name = e.name || e.id;
      
    name && setCookie( name, getState( name ), keepDay );
  };


  var appendHandler = function ( name ) {
    var d = document;
    var counter = 0;
    var elements = d.getElementsByName( name ) || [ d.getElementById( name ) ];
    var e;
    
    while( e = elements[ counter++ ] ) {
      e./*@if( @_jscript ) attachEvent( 'on' + @else@*/ addEventListener( /*@end@*/
        'change', listener, false);
      e./*@if( @_jscript ) attachEvent( 'on' + @else@*/ addEventListener( /*@end@*/
        'unload', listener, false);
    }
  };


  var counter = 1;
  var val;
  var inpName; //argumentで、指定された要素の名前
  
  while( inpName = arguments[ counter++ ] ) {
    val = getCookie( inpName ); //cookieに存在?
    
    if( null === val )
      val = getState( inpName ); //formの設定値の読み込み
    else
      setState( inpName, val ); //formに値をセットする
    
    setCookie( inpName, val, keepDay ); //cookieに保存
    appendHandler( inpName ); //onchangeのイベント設定
  }
};



FormElementsKeeper( 10, 'aa', 'bb' );
FormElementsKeeper( 10, 'cc' );
</script>
</body>
</html>

こっちは古いほう

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Script-Type" content="application/javascript">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>TEST</title>
<style type="text/css">

</style>
</head>
<body>
<input type="text" name="aa">

<script type="text/javascript">
//@cc_on
// name で指定された Input要素の状態を、cookieを利用して維持する。
// select の multiple には、未対応。
var FormElementsKeeper = function ( ) {
  this.initializer.apply( this, arguments );
};

FormElementsKeeper.prototype.initializer = function ( keepDay /*, target0 [, target1, ..] */ ) {
  
  this.keepDay = keepDay; //cookieの保存期間

  var counter = 1;
  var val;
  var inpName; //argumentで、指定された要素の名前
  
  while( inpName = arguments[ counter++ ] ) {
    val = this.getCookie( inpName ); //cookieに存在?
    
    if( null === val )
      val = this.getState( inpName ); //formの設定値の読み込み
    else
      this.setState( inpName, val ); //formに値をセットする
    
    this.setCookie( inpName, val, keepDay ); //cookieに保存
    
    this.appendHandler( inpName ); //onchangeのイベント設定
  }
};


FormElementsKeeper.prototype.getCookie = function ( name ) {
  name = encodeURIComponent( name ).replace( /([.*()]) /g, '\\$1' );
  var v = document.cookie.match( RegExp( name + '\\s*=\\s*(.*?)(?:[\\s;,]|$)' ) );
  return v ? decodeURIComponent( v[1] ): null;
};



FormElementsKeeper.prototype.setCookie = function ( name, value, day, path, domain ) {
  var d = new Date;
  d.setDate( d.getDate() + day );
  return document.cookie = encodeURIComponent( name ) + '=' + encodeURIComponent( value ) +
    '; ' + 'expires=' + d.toUTCString( ) +
    '; ' + ( path ? 'path=' + encodeURI( path ) + '; ': '' ) +
    (domain ? 'domain=' + encodeURI ( domain ) + '; ': '' );
};


FormElementsKeeper.prototype.setState = function ( inpName, value ) {
  var d = document;
  var counter = 0;
  var elements = d.getElementsByName( inpName ) || [ d.getElementById( inpName ) ];
  var e;
  
  while( e = elements[ counter++ ] ) {

    switch( e.type ) {

      case 'hidden' : case 'submit': case 'text':  
      case 'button' : case 'reset' : case 'textarea':
        e.value = value;
        break;

      case 'checkbox': case'radio':
        e.checked = e.value == value;
        break;

      case 'select-one': // valueは必須
        var cnt = 0, o;

        while( o = e.options[ cnt++ ] )
          if( o.value == value ) o.selected = true;
        break;

      default:
    }
  }
};


FormElementsKeeper.prototype.getState = function ( inpName ) {
  var d = document;
  var counter = 0;
  var elements = d.getElementsByName( inpName ) || [ d.getElementById( inpName ) ];
  var e;
  
  while( e = elements[ counter++ ] ) {
    switch( e.type ) {

      case 'hidden' : case 'submit': case 'text':  
      case 'button' : case 'reset' : case 'textarea':
        return e.value;
        break;

      case 'checkbox': case'radio':
        if( e.checked ) return e.value;
        break;

      case 'select-one': // case 'select-multiple':
        var cnt = 0, o;

        while( o = e.options[ cnt++ ] )
          if( o.selected ) return e.value;
        break;

      default:
    }
  }
  return null;
};

FormElementsKeeper.prototype.appendHandler = function ( name ) {
  var d = document;
  var counter = 0;
  var elements = d.getElementsByName( name ) || [ d.getElementById( name ) ];
  var e;
  
  while( e = elements[ counter++ ] ) {
    e./*@if( @_jscript ) attachEvent( 'on' + @else@*/ addEventListener( /*@end@*/
      'change', (function ( that, _e ) {
          _e./*@if( @_jscript ) attachEvent( 'on' + @else@*/ addEventListener( /*@end@*/
            'unload', arguments.callee, false);

          return function ( evt ) {
            var e  = evt./*@if( @_jscript ) srcElement @else@*/ target /*@end@*/;
            var name = e.name || e.id;
            
            if( name )
              that.setCookie( name, that.getState( name ), that.keepDay );
          };
        })( this, e ), false );
  }
};


new FormElementsKeeper( 10, 'aa' );
</script>
</body>
</html>