Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6595108
  • 博文数量: 227
  • 博客积分: 10047
  • 博客等级: 上将
  • 技术积分: 6678
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-11 10:33
个人简介

网上的蜘蛛

文章分类

全部博文(227)

文章存档

2010年(19)

2009年(29)

2008年(179)

分类: 系统运维

2008-04-15 09:01:25

   用JavaScript实现本地缓存,把memory.js和test.htm放到同一个文件夹下,在网页中浏览test.htm查看效果。原创作者:
 
memory.js
 

function window.onerror()
{
 return false;
}
function pageCache(prefix)
{
 this.prefix = (typeof(prefix)!="string")?"":"prefix_" + prefix + "_";
 this.setCookie = function(name,value)
 {
  var Days = 1;
  var exp = new Date();
  exp.setTime(exp.getTime() + Days*24*60*60*1000);
  document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
 }
 this.getCookie = function(name)
 {
  var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));
  if(arr != null) return unescape(arr[2]); return null;
 }
 this.delCookie = function(name)
 {
  var exp = new Date();
  exp.setTime(exp.getTime() - 1);
  var cval=this.getCookie(name);
  if(cval!=null) document.cookie= name + "="+cval+";expires="+exp.toGMTString();
 }
 
 this.setValue = function(obj)
 {
  var tmpObj = document.getElementsByName(obj.name);
  if(obj.type=="text" || obj.type=="checkbox" || obj.type=="textarea")
  {
   for(var i=0;i<tmpObj.length;i++)
   {
    if(obj==tmpObj[i])
    {
     this.setCookie(this.prefix + obj.form.name + "_" + obj.name + "_" + i.toString(),(obj.type=="checkbox")?obj.checked:obj.value);
     break;
    }
   }
  }
  else if(obj.type=="radio" || obj.type=="select-one")
  {
   this.setCookie(this.prefix + obj.form.name + "_" + obj.name,obj.value);
  }
 }
 
 //清除页面缓存

 this.clearCache = function()
 {
  var tmpObj;
  var tmpName;
  for(var i=0;i<document.forms.length;i++)
  {
   for(var j=0;j<document.forms[i].elements.length;j++)
   {
    tmpObj = document.forms[i].elements[j];
    if(tmpObj.type=="text" || tmpObj.type=="checkbox" || tmpObj.type=="textarea")
    {
     for(var k=0;k<document.getElementsByName(tmpObj.name).length;k++)
     {
      tmpName = this.prefix + document.forms[i].name + "_" + tmpObj.name + "_" + k.toString();
      if(this.getCookie(tmpName)!=null) this.delCookie(tmpName);
     }
    }
    else if(tmpObj.type=="radio" || tmpObj.type=="select-one")
    {
     tmpName = this.prefix + document.forms[i].name + "_" + tmpObj.name;
     if(this.getCookie(tmpName)!=null) this.delCookie(tmpName);
    }
   }
  }
 }
 
 // 加载页面缓存

 this.loadCache = function()
 {
  var tmpValue;
  var tmpObj;
  for(var i=0;i<document.forms.length;i++)
  {
   for(var j=0;j<document.forms[i].elements.length;j++)
   {
    tmpValue = null;
    tmpObj = document.forms[i].elements[j];
    if(tmpObj.type=="text" || tmpObj.type=="checkbox" || tmpObj.type=="textarea")
    {
     for(var k=0;k<document.getElementsByName(tmpObj.name).length;k++)
     {
      if(document.forms[i].elements[j]==document.getElementsByName(tmpObj.name)[k])
      {
       tmpValue = this.getCookie(this.prefix + document.forms[i].name + "_" + tmpObj.name + "_" + k.toString());
       break;
      }
     }
     if(tmpValue!=null)
     {
      if(tmpObj.type=="checkbox")
      {
       tmpObj.checked = (tmpValue=="true")?true:false;
      }
      else
      {
       tmpObj.value = tmpValue;
      }
     }
    }
    else if(tmpObj.type=="radio")
    {
     tmpValue = this.getCookie(this.prefix + document.forms[i].name + "_" + tmpObj.name);
     if(tmpValue!=null)
     {
      if(tmpObj.value==tmpValue) tmpObj.checked = true;
     }
    }
    else if(tmpObj.type=="select-one")
    {
     tmpValue = this.getCookie(this.prefix + document.forms[i].name + "_" + tmpObj.name);
     if(tmpValue!=null)
     {
      for(var k=0;k<tmpObj.length;k++)
      {
       if(tmpObj.options[k].value == tmpValue)
       {
        tmpObj.options[k].selected = true;
        break;
       }
      }
     }
    }
   }
  }
 }
}
// 绑定控件事件

function BindEvent(CacheObj)
{
 var arr;
 var i;
 arr = document.getElementsByTagName("INPUT");
 for(i=0;i<arr.length;i++)
 {
  if(arr[i].type=="text")
  {
   arr[i].onblur = function() {CacheObj.setValue(this);}
  }
  else if(arr[i].type=="radio" || arr[i].type=="checkbox")
  {
   arr[i].onclick = function() {CacheObj.setValue(this);}
  }
 }
 
 arr = document.getElementsByTagName("TEXTAREA");
 for(i=0;i<arr.length;i++)
 {
  arr[i].onblur = function() {CacheObj.setValue(this);}
 }
 
 arr = document.getElementsByTagName("SELECT");
 for(i=0;i<arr.length;i++)
 {
  arr[i].onblur = function() {CacheObj.setValue(this);}
 }
}

test.html

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charsetValue=gb2312">
<title>本地缓存演示</title>
</head>
<body onLoad="InitCache()">
<script language="javascript" src="memory.js"></script>
<script type="text/javascript" language="javascript">
var cache = new pageCache("123");//123用于本地缓存的标识
function InitCache()
{
 cache.loadCache();//加载缓存
 BindEvent(cache);//给页面控件绑定事件,用于记录缓存
}
function DelCache()
{
 if(cache!=null) cache.clearCache();
}
</script>
<form name="form1" method="post" action="">
 <p>
  <input type="text" name="textfield">
</p>
 <p>
  <input type="text" name="textfield">
 </p>
 <p>
  <input type="text" name="textfield2">
 </p>
 <p>
  <input name="radiobutton" id="radiobutton" type="radio" value="1"><label for="radiobutton">abcdefg</label>
  <input name="radiobutton" type="radio" value="2">
  <input name="radiobutton" type="radio" value="3">
 </p>
 <p>
  <input type="checkbox" name="checkbox" value="checkbox">
  <input type="checkbox" name="checkbox" value="checkbox">
  <input type="checkbox" name="checkbox" value="checkbox">
 </p>
 <p>
  <textarea name="textarea" cols="120" rows="8"></textarea>
 </p>
 <p>
  <select name="select">
   <option value="1">aa</option>
   <option value="2">bb</option>
   <option value="3">cc</option>
   <option value="4">dd</option>
  </select>
 </p>
 <p>
  <input type="button" name="Submit" value="清除缓存" onClick="DelCache();location.reload()">
 </p>
</form>
</body>
</html>

实现的效果为暂时保存了用户输入的信息,比如需要用户很多资料,多页显示,可以翻页不至于使得前面的填好的资料丢失。但是应该可能跟你浏览器cookie设置有关..保存时间等。

阅读(3716) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~