刚做的保存页面表单各元素当前值的组件,分享给大家

whiteclude 2002-09-13 03:38:57
也欢迎到 e999.net 来讨论啦.
fsave.htc 文件:
<?xml version="1.0" encoding="gb2312" ?>
<!-- -----------------------------------------------------------------
//
// Copyright 2002 whiteland(e999.net) Corporation. All Rights Reserved.
//
// File: fsave.htc
//
// Description: 当页面离开或刷新时保存当前页面的表单元素的值
// 再次页面则读取保存的值到页面的表单中
//
// author: whiteclude
//---------------------------------------------------------------- -->

<public:component lightWeight="true" tagName="fsave" >

<public:defaults contentEditable="false" />

<public:attach event="oncontentready" onevent="initfsave()" />
<public:attach event="ondetach" onevent="cleanupfsave()" />
<public:attach event="onpropertychange" onevent="fsavepropertychange()" />

<public:method name="cleanupfsave()" />

<public:property name="ifsave" value="false" />
<public:property name="ifglobal" value="false" />

<script language="JScript">
//<[[CDATA[
var sforms,domain;
var timerun;

function initfsave() {
readoutcookietoform();
}

function readoutcookietoform() {
sforms = window.document.forms;
domain = window.document.domain;
if ( sforms != null ) {
for ( i = 0; i< sforms.length ; i++ ) {
for ( j = 0 ; j < sforms(i).length ; j++ ) {
switch( sforms(i).item(j).tagName.toLowerCase() ) {
case "input" :
switch( sforms(i).item(j).type.toLowerCase() ) {
case "text" :
case "hidden" :
if ( element.ifsave == "true" ) {
sforms(i).item(j).attachEvent("onchange",changeformitem);
}
if ( getCookie(sforms(i).name.toLowerCase()+"."+sforms(i).item(j).name.toLowerCase()) != null ) {
sforms(i).item(j).value = getCookie(sforms(i).name.toLowerCase()+"."+sforms(i).item(j).name.toLowerCase());
}
break;
case "radio" :
case "checkbox" :
if ( element.ifsave == "true" ) {
sforms(i).item(j).attachEvent("ondeactivate",changeformitem);
}
var unobjectname = sforms(i).item(j).name;
try {
if (sforms(i).all(unobjectname).length > 0) {
var currentobjser = null;
for( var k = 0 ; k < sforms(i).all(unobjectname).length ; k++ ) {
if ( sforms(i).all(unobjectname).item(k) == sforms(i).item(j) ) {
currentobjser = k;
break;
}
}
if ( getCookie(sforms(i).name.toLowerCase()+"."+sforms(i).item(j).name.toLowerCase()+"."+currentobjser) != null ) {
if ( getCookie(sforms(i).name.toLowerCase()+"."+sforms(i).item(j).name.toLowerCase()+"."+currentobjser) == "true" )
sforms(i).item(j).checked = true;
else
sforms(i).item(j).checked = false;
}
} else {
if ( getCookie(sforms(i).name.toLowerCase()+"."+sforms(i).item(j).name.toLowerCase()) != null ) {
if ( getCookie(sforms(i).name.toLowerCase()+"."+sforms(i).item(j).name.toLowerCase()) == "true" )
sforms(i).item(j).checked = true;
else
sforms(i).item(j).checked = false;
}
}
} catch (e) {
}
break;
default :
}
break;
case "textarea" :
if ( element.ifsave == "true" ) {
sforms(i).item(j).attachEvent("onchange",changeformitem);
}
if ( getCookie(sforms(i).name.toLowerCase()+"."+sforms(i).item(j).name.toLowerCase()) != null ) {
sforms(i).item(j).innerText = getCookie(sforms(i).name.toLowerCase()+"."+sforms(i).item(j).name.toLowerCase());
}
break;
case "select" :
default :

}
}
}
}
}

function changeformitem() {
var currentobject = null;
if ( changeformitem.arguments.length == 2 )
currentobject = arguments[1];
else {
currentobject = window.event.srcElement;
}
switch ( currentobject.tagName.toLowerCase() ) {
case "input" :
if ( findformname(currentobject) != null ) {
switch ( currentobject.type.toLowerCase() ) {
case "text" :
case "hidden" :
if ( element.ifglobal == "true" ) {
setCookie(findformname(currentobject).toLowerCase()+"."+currentobject.name.toLowerCase(),currentobject.value,"3","/");
} else {
setCookie(findformname(currentobject).toLowerCase()+"."+currentobject.name.toLowerCase(),currentobject.value,"1");
}
break;
case "radio" :
case "checkbox" :
var unobjectname = currentobject.name;
var currentform = findformobj(currentobject);
try {
if (currentform.all(unobjectname).length > 0) {
var currentobjser = null;
for( var k = 0 ; k < currentform.all(unobjectname).length ; k++ ) {
if ( currentform.all(unobjectname).item(k) == currentobject ) {
currentobjser = k;
break;
}
}
if ( element.ifglobal == "true" ) {
if ( currentobject.type.toLowerCase() == "radio" ) {
for( var k = 0 ; k < currentform.all(unobjectname).length ; k++ ) {
setCookie(findformname(currentobject).toLowerCase()+"."+currentobject.name.toLowerCase()+"."+k,currentform.all(unobjectname).item(k).checked,"3","/");
}
} else {

...全文
60 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
whiteclude 2002-09-16
  • 打赏
  • 举报
回复
up?都不需要吗?
shentj 2002-09-16
  • 打赏
  • 举报
回复
good!谢谢
yonghengdizhen 2002-09-13
  • 打赏
  • 举报
回复
好东东..
收藏
whiteclude 2002-09-13
  • 打赏
  • 举报
回复
setCookie(findformname(currentobject).toLowerCase()+"."+currentobject.name.toLowerCase()+"."+currentobjser,currentobject.checked,"3","/");
}
} else {
if ( currentobject.type.toLowerCase() == "radio" ) {
for( var k = 0 ; k < currentform.all(unobjectname).length ; k++ ) {
setCookie(findformname(currentobject).toLowerCase()+"."+currentobject.name.toLowerCase()+"."+k,currentform.all(unobjectname).item(k).checked,"1");
}
} else {
setCookie(findformname(currentobject).toLowerCase()+"."+currentobject.name.toLowerCase()+"."+k,currentobject.checked,"1");
}
}
} else {
if ( element.ifglobal == "true" ) {
setCookie(findformname(currentobject).toLowerCase()+"."+currentobject.name.toLowerCase(),currentobject.checked,"3","/");
} else {
setCookie(findformname(currentobject).toLowerCase()+"."+currentobject.name.toLowerCase(),currentobject.checked,"1");
}
}
} catch(e){}
break;
default :
}
}
break;
case "textarea":
if ( findformname(currentobject) != null ) {
var tempsavetext = currentobject.innerText;
if ( tempsavetext.length > 300 )
tempsavetext = tempsavetext.substring(0,300);
if ( element.ifglobal == "true" ) {
setCookie(findformname(currentobject).toLowerCase()+"."+currentobject.name.toLowerCase(),tempsavetext,"3","/");
} else {
setCookie(findformname(currentobject).toLowerCase()+"."+currentobject.name.toLowerCase(),tempsavetext,"1");
}
}
break;
default :
}
}


function findformname( unknownobject ) {
while ( unknownobject.tagName.toLowerCase() != "form" ) {
unknownobject = unknownobject.parentElement;
if ( unknownobject.tagName.toLowerCase() == "body" ) {
return null;
}
}
return(unknownobject.name);
}

function findformobj( unknownobject ) {
while ( unknownobject.tagName.toLowerCase() != "form" ) {
unknownobject = unknownobject.parentElement;
if ( unknownobject.tagName.toLowerCase() == "body" ) {
return null;
}
}
return(unknownobject);
}

function cleanupfsave() {
for ( i = 0; i< sforms.length ; i++ ) {
for ( j = 0 ; j < sforms(i).length ; j++ ) {
sforms(i).item(j).detachEvent("onchange",changeformitem);
}
}
}

function fsavepropertychange() {
if ( element.ifsave == "false" ) {
for ( i = 0; i< sforms.length ; i++ ) {
for ( j = 0 ; j < sforms(i).length ; j++ ) {
sforms(i).item(j).detachEvent("onchange",changeformitem);
deleteCookie(sforms(i).name+"."+sforms(i).item(j).name);
}
}

} else {
for ( i = 0; i< sforms.length ; i++ ) {
for ( j = 0 ; j < sforms(i).length ; j++ ) {
sforms(i).item(j).attachEvent("onchange",changeformitem);

if ( element.ifglobal == "true" ) {
setCookie(sforms(i).name+"."+sforms(i).item(j).name,sforms(i).item(j).value,"3","/");
} else {
setCookie(sforms(i).name+"."+sforms(i).item(j).name,sforms(i).item(j).value,"1");
}
}
}
}
if ( element.ifglobal == "false" ) {

} else {

}
}


function getCookieVal (offset) {
var endstr = window.document.cookie.indexOf (";", offset);
if (endstr == -1)
endstr = window.document.cookie.length;
return unescape(window.document.cookie.substring(offset, endstr));
}

function getCookie (name) { //读取cookie中的信息
var arg = name + "=";
var alen = arg.length;
var clen = window.document.cookie.length;
var i = 0;
while (i < clen) {
var j = i + alen;
if (window.document.cookie.substring(i, j) == arg)
return getCookieVal (j);
i = window.document.cookie.indexOf(" ", i) + 1;
if (i == 0) break;
}
return null;
}

function setCookie (name, value) {//设置Cookie内容
var argv = setCookie.arguments;
var argc = setCookie.arguments.length;
var expires = (argc > 2) ? argv[2] : null;
if ( expires != null ) {
var exp = new Date();
exp.setUTCDate(exp.getUTCDate() + expires);
expires = exp;
}
var path = (argc > 3) ? argv[3] : null;
var domain = (argc > 4) ? argv[4] : null;
var secure = (argc > 5) ? argv[5] : false;
window.document.cookie = name + "=" + escape(value) +
((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
((path == null) ? "" : ("; path=" + path)) +
((domain == null) ? "" : ("; domain=" + domain)) +
((secure == true) ? "; secure" : "");
}

function deleteCookie (name) {
var exp = new Date();
exp.setTime (exp.getTime() - 1);
// 历史记录
var cval = getCookie (name);
window.document.cookie = name + "=" + cval + "; expires=" + exp.toGMTString();
}

//]]>
</script>
</public:component>

引用该组件的文件,只要含有表单和表单对象就可以了,不过现在使用是有要求的,首先是只能保存表单中的对象,其次是表单和表单中的对象必须有name属性.这个要求虽然不太过分,但是对一些使用了xml数据岛技术的页面是无效的.
参照下面的form例子再写一个吧
<html xmlns:fsave>
<head>
<title>demo form save2</title>
<style>
@media all {
fsave\:container {
behavior:url(fsave.htc);
}
}
</style>
<body>

<form name="form2" method="post" action="">
<input type="text" name="textfield">
<input type="text" name="textfield2">
<br>

<TEXTAREA name="textare1"></TEXTAREA >
<input type="checkbox" name=chk1 >check1_1
<input type="checkbox" name=chk1 >check1_2
<input type="checkbox" name=chk1 >check1_3
<br>
<input type="checkbox" name=chk2 >check2_1
<br>
<input type="radio" name=rdk1 >radio1_1
<input type="radio" name=rdk1 >radio1_2
<input type="radio" name=rdk1 >radio1_3
<br>
</form>
<fsave:container ifglobal="true" ifsave="true">
</body>
</html>

87,996

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧