|
必知:所有需要处理的HTML元素必须具有ID属性,组件只会探测元素的ID属性
1. 在</Head>上加入 <STYLE> .userData {behavior:url(#default#userdata);} </STYLE>
2. 在<body>下加入 <INPUT type=text class=userData id=OfflineSave_Area style="display:none">
3. 在</body>上加入 <script src=OfflineSave.js></script>
4. 为form标签加入扩展属性OfflineSave 例:<form id=myOfflineSaveForm OfflineSave ToolsBarStyle="mycssclass"> ToolsBarStyle为css class属性,容器为div,包含select,input,button
注意: 情况1: <form id=myform onsubmit="docheck(this)"> <input type=text id=mytext> <input type=submit value=submit> </form> 在这种情况下,组件可以自动探测服务器存活状态,如服务器无法连接时,会提示本地保存, 并且docheck函数也可以正常工作
情况2: <form id=myform > <input type=text id=mytext> <input type=button value=submit onclick="myform.submit()"> </form> 在这种情况下,组件无法截获提交事件,也无法自动探测服务器存活状态
建议:检测表单内数据时,在form标签onsubmit事件内写入检测函数
联系我:qq:13872888 注明:blueidea 复制代码 代码如下: var os_Obj,os_usd;
var os_dg=document.getElementById; var os_ButtonCss="style=\"cursor:hand;height:20px;padding:0px 3px;border:1px solid #67C1E4;\""; var os_SelectCss="style=\"font-size:12px;\""; var os_SaveSuccessStr="离线数据保存成功!"; var os_SaveProStr="请输入离线保存的名称:(如为空则用当前时间表示)"; var os_LoadProStr="确认要载入离线数据吗?"; var os_DelProStr="确认要删除离线数据吗?"; var os_DelSuccessStr="离线数据删除成功!"; var os_oUD="OfflineSave_oPersistInput"; var os_DefaultFiledLength=10;//Default Filed length var os_str="OfflineSave_"; var os_CannotSaveStr="保存数据时出现错误![离线保存空间仅限640K]\n\n有可能已超出离线保存容量!请删除部分数据后再保存!"; var os_expires = (new Date(2010,1,1)).toUTCString();
InitOfflineSave(); function InitOfflineSave(){ for(var i=0;i<document.forms.length;i++){ if(document.forms[i].OfflineSave!=null){ os_usd=os_dg("OfflineSave_Area"); var tbs=document.forms[i].ToolsBarStyle==null?"":document.forms[i].ToolsBarStyle; os_CreateToolBar(document.forms[i],tbs); os_GetOfflineSaveList(document.forms[i].id); var cmd=document.forms[i].onsubmit==null?"":document.forms[i].onsubmit; if(cmd!=""){ cmd=document.forms[i].onsubmit+""; cmd=cmd.split("{")[1].split("}")[0].replace("\n",""); } cmd=escape(cmd); eval("document.forms[i].onsubmit=function(){return os_CheckSubmit('"+document.forms[i].id+"','"+cmd+"');}"); break; } } }
function os_CreateToolBar(obj,boolbarstyle){ var hc; hc="<div id='os_"+obj.id+"_div'><select id='os_"+obj.id+"_Select' "+os_SelectCss+">"; hc+="</select>"; hc+=" "; hc+="<input type=button "+os_ButtonCss+" value=载入 onclick=\"os_LoadData('"+obj.id+"');\">"; hc+=" "; hc+="<input type=button "+os_ButtonCss+" value=删除 onclick=\"os_DelData('"+obj.id+"');\">"; hc+=" "; hc+="<input type=button "+os_ButtonCss+" value=离线保存 onclick=\"os_SaveData('"+obj.id+"');\"></div>"; obj.innerHTML=hc+obj.innerHTML; if(boolbarstyle==""){ os_dg("os_"+obj.id+"_div").style.textAlign = "left"; os_dg("os_"+obj.id+"_div").style.textvAlign = "middle"; os_dg("os_"+obj.id+"_div").style.paddingTop = "3"; os_dg("os_"+obj.id+"_div").style.height = "30"; os_dg("os_"+obj.id+"_div").style.border = "1 solid black"; os_dg("os_"+obj.id+"_div").style.paddingLeft = "5"; } else os_dg("os_"+obj.id+"_div").className=boolbarstyle; }
function os_CheckSubmit(id,subfunc){ if(!os_CanSubmit(os_dg(id).action)){ if(confirm("离线保存提示:\n\n您要提交的服务器连接可能出现问题,是否进行离线保存?")){ os_SaveData(id); } return false; } eval(unescape(subfunc)); }
function os_LoadData(id){ var v=os_dg("os_"+id+"_Select").selectedIndex; if(v==0) return;
var ud=os_str+id+os_dg(id).length; if(confirm(os_LoadProStr+"\n\n记录名称:"+os_getUserData(ud,"f_"+v+"_os_savename")+"\n保存时间:"+os_getUserData(ud,"f_"+v+"_os_savedate"))){ var lcount=os_dg(id).length; for(var i=0;i<lcount;i++){ if(os_dg(id).item(i).type!="submit"&&os_dg(id).item(i).type!="reset"&&os_dg(id).item(i).type!="button"&&os_dg(id).item(i).id!="os_"+id+"_Select"){ if(os_dg(id).item(i).type=="radio"||os_dg(id).item(i).type=="checkbox") os_dg(os_dg(id).item(i).id).checked=os_getUserData(ud,"f_"+v+"_"+os_dg(id).item(i).id)=="1"?true:false; else{ if(os_dg(id).item(i).type=="select-multiple"){ var sm=os_getUserData(ud,"f_"+v+"_"+os_dg(id).item(i).id).split(","); var x; for(x=0;x<os_dg(id).item(i).length;x++) os_dg(id).item(i).options[x].selected=false; for(x=0;x<sm.length-1;x++) os_dg(id).item(i).options[parseInt(sm[x])].selected=true; } else{ if(os_dg(id).item(i).type=="select-one") os_dg(os_dg(id).item(i).id).selectedIndex=parseInt(os_getUserData(ud,"f_"+v+"_"+os_dg(id).item(i).id)); else{ //alert(os_getUserData(ud,"f_"+v+"_"+os_dg(id).item(i).id)); os_dg(os_dg(id).item(i).id).value=unescape(os_getUserData(ud,"f_"+v+"_"+os_dg(id).item(i).id)); } } } } } } }
function os_DelData(id){ var v=os_dg("os_"+id+"_Select").selectedIndex; if(v==0) return;
var ud=os_str+id+os_dg(id).length; if(confirm(os_DelProStr+"\n\n记录名称:"+os_getUserData(ud,"f_"+v+"_os_savename")+"\n保存时间:"+os_getUserData(ud,"f_"+v+"_os_savedate"))){ var i=0; var ud=os_str+id+os_dg(id).length; var lcount=parseInt(os_getUserData(ud,"count"));
var vcount=os_dg(id).length; for(i=0;i<vcount;i++){ if(os_dg(id).item(i).type!="button"&&os_dg(id).item(i).id!="os_"+id+"_Select") if(v<lcount) os_putUserData(ud,"f_"+v+"_"+os_dg(id).item(i).id,os_getUserData(ud,"f_"+lcount+"_"+os_dg(id).item(i).id)); os_remUserData(ud,"f_"+lcount+"_"+os_dg(id).item(i).id); } if(v<lcount){ os_putUserData(ud,"f_"+v+"_os_savename",os_getUserData(ud,"f_"+lcount+"_os_savename")); os_putUserData(ud,"f_"+v+"_os_savedate",os_getUserData(ud,"f_"+lcount+"_os_savedate")); } os_remUserData(ud,"f_"+lcount+"_os_savename"); os_remUserData(ud,"f_"+lcount+"_os_savedate");
eval("os_putUserData(ud,\"count\",\""+(lcount-1)+"\");");
var s=os_dg("os_"+id+"_Select"); if(lcount==1){ os_delUserData(ud); while (s.length>0) s.remove(0); s.add(new Option("无数据",0)); } else{ s.item(0).text="共有"+(lcount-1)+"个记录"; if(v<s.length){ s.item(0).value=0; s.item(v).text=s.item(s.length-1).text; } s.remove(s.length-1); } alert(os_DelSuccessStr); } }
function os_SaveData(id){ if(os_dg(id).length<=0){ alert("[OfflineSave]Error:\n\n"+id+" no Element!(input,radio,checkbox,select)"); return; }
var sd=new Date(); var sn=prompt(os_SaveProStr,sd.toLocaleString()+":MyData"); var ud=os_str+id+os_dg(id).length; var lcount=os_getUserData(ud,"count"); lcount=lcount==""||lcount==null?1:parseInt(lcount)+1; if(os_dg(id).length*10*2*lcount>64000){ alert(os_CannotSaveStr); return; } try{
sn=sn==""?sd.toLocaleString():sn;
var vcount=os_dg(id).length; for(var i=0;i<vcount;i++){ if(os_dg(id).item(i).type!="submit"&&os_dg(id).item(i).type!="reset"&&os_dg(id).item(i).type!="button"&&os_dg(id).item(i).id!="os_"+id+"_Select"){ if(os_dg(id).item(i).type=="radio"||os_dg(id).item(i).type=="checkbox"){ eval("os_putUserData(\""+ud+"\",\"f_"+lcount+"_"+os_dg(id).item(i).id+"\",\""+(os_dg(id).item(i).checked?"1":"0")+"\");"); } else{ if(os_dg(id).item(i).type=="select-multiple"){ var mc=""; for(var x=0;x<os_dg(id).item(i).length;x++){ if(os_dg(id).item(i).options[x].selected) mc+=x+","; } eval("os_putUserData(\""+ud+"\",\"f_"+lcount+"_"+os_dg(id).item(i).id+"\",\""+mc+"\");"); } else{ if(os_dg(id).item(i).type=="select-one") eval("os_putUserData(\""+ud+"\",\"f_"+lcount+"_"+os_dg(id).item(i).id+"\",\""+os_dg(id).item(i).selectedIndex+"\");"); else eval("os_putUserData(\""+ud+"\",\"f_"+lcount+"_"+os_dg(id).item(i).id+"\",\""+escape(os_dg(id).item(i).value)+"\");"); } } } } eval("os_putUserData(\""+ud+"\",\"f_"+lcount+"_os_savename\",\""+sn+"\");"); eval("os_putUserData(\""+ud+"\",\"f_"+lcount+"_os_savedate\",\""+sd.toLocaleString()+"\");"); eval("os_putUserData(ud,\"count\",\""+lcount+"\");");//save list count var s=os_dg("os_"+id+"_Select"); s.item(0).text="共有"+lcount+"个记录"; s.item(0).value=0; s.add(new Option(sn,lcount)); alert(os_SaveSuccessStr); } catch(e){ alert(os_CannotSaveStr+"\n\n错误原因:"+e); } }
function os_GetOfflineSaveList(id){ var ud=os_str+id+os_dg(id).length; var s=os_dg("os_"+id+"_Select"); var lcount=os_getUserData(ud,"count"); var sv=""; while (s.length>0) s.remove(0); lcount=lcount==""||lcount==null?0:parseInt(lcount); if(lcount<=0) s.add(new Option("无数据","0")); else{ s.add(new Option("共有"+lcount+"个记录","0")); for(var i=1;i<=lcount;i++){ eval("sv=os_getUserData(ud,\"f_"+i+"_os_savename\");"); s.add(new Option(sv,i)); } } }
function os_putUserData(sUDName,sName,sVal) { os_usd.load(sUDName); os_usd.expires = os_expires; os_usd.setAttribute(sName,sVal); os_usd.save(sUDName); return; }
function os_remUserData(sUDName,sName) { os_usd.load(sUDName); os_usd.removeAttribute(sName); os_usd.save(sUDName); return; }
function os_getUserData(sUDName,sName) { os_usd.load(sUDName); return os_usd.getAttribute(sName); }
function os_delUserData(sUDName){ var oTimeNow = new Date(); // Start Time oTimeNow.setMinutes(oTimeNow.getMinutes()+1); var sExpirationDate = oTimeNow.toUTCString(); os_usd.load(sUDName); os_usd.expires = sExpirationDate; os_usd.save(sUDName); return; }
function os_CanSubmit(url){ var xmlHTTP = window.ActiveXObject? new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest(); xmlHTTP.open("get",url,false); xmlHTTP.send(""); return xmlHTTP.status=="200"; }
OfflineSave.htm 复制代码 代码如下: <html> <head> <title>离线保存</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <STYLE> .userData {behavior:url(#default#userdata);} </STYLE> <link href="css.css" rel="stylesheet" type="text/css"> </head> <body> <INPUT type="text" class="userData" id="OfflineSave_Area" style="DISPLAY:none"> <table width="100%" border="0" cellpadding="0" cellspacing="0" style="FONT-SIZE:12px"> <tr> <td height="78" colspan="3" valign="top"><font size="4" color="red">Ajax演示程序(J2EE)</font> <BR> <BR> 服务端:<b>JDK1.4 TomCAT4.1 Hibernate3 MSSQL Server2000(SP4) DWR1.0</b><BR> 客户端:<b>JavaScript(CallBack) VML </b> <BR> 编写人:富深协通常州研发中心 姜泉</td> </tr> <tr> <td colspan="3"><BR> <table border="1" class="listView" width="100%"> <Caption> 离线数据保存(仅限IE浏览器5.0版本以上)</Caption> <tbody> <tr> <td><form id="myOfflineSaveForm" action="J2EE_AJAX.html" onsubmit="alert('这是在HTML页面中的onsubmit事件中执行的函数!');" OfflineSave> <table cellSpacing="0" cellPadding="2" width="100%" border="1"> <TR> <TD>名称<input type="text" id="name" size="5"> </TD> <TD>公司全称<TEXTAREA id="gsqc" name="gsqc" rows="2" cols="20"> </TEXTAREA></TD> <TD>客户代码<INPUT id="dm" type="checkbox" name="dm"></TD> </TR> <tr> <TD>分类<SELECT id="fl" name="fl"> <OPTION selected>中国人</OPTION> <OPTION>外星人</OPTION> <OPTION>山西人</OPTION> </SELECT></TD> <TD>性别<INPUT id="cz" type="radio" value="cz" checked name="RadioGroup">男<INPUT id="cz1" type="radio" value="cz1" name="RadioGroup">女</TD> <TD>增加日期<SELECT id="rq" size="4" name="rq" multiple> <OPTION>2000年</OPTION> <OPTION>2003年</OPTION> <OPTION>2004年</OPTION> <OPTION>2005年</OPTION> </SELECT></TD> </tr> </table><input type=submit value=submit > </form> </td> </tr> </tbody> </table> </td> </tr> </table>
<script src="OfflineSave.js"></script> </body> </html>
|
|