Hello,
I am using the following script to record inside a cookie form elements that can be recalled on a future visit. I works great but it is recording "hidden" fields as well as standard input fields and this causes big problems for its application. Here is the script:
var expDays = 100;
var exp = new Date();
exp.setTime(exp.getTime() + (expDays*24*60*60*1000));
function getCookieVal (offset) {
var endstr = document.cookie.indexOf (";", offset);
if (endstr == -1) { endstr = document.cookie.length; }
return unescape(document.cookie.substring(offset, endstr));
}
function GetCookie (name) {
var arg = name + "=";
var alen = arg.length;
var clen = document.cookie.length;
var i = 0;
while (i < clen) {
var j = i + alen;
if (document.cookie.substring(i, j) == arg) return getCookieVal (j);
i = document.cookie.indexOf(" ", i) + 1;
if (i == 0) break;
}
return null;
}
function SetCookie (name, value) {
var argv = SetCookie.arguments;
var argc = SetCookie.arguments.length;
var expires = (argc > 2) ? argv[2] : null;
var path = (argc > 3) ? argv[3] : null;
var domain = (argc > 4) ? argv[4] : null;
var secure = (argc > 5) ? argv[5] : false;
document.cookie = name + "=" + escape (value) +
((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
((path == null) ? "" : ("; path=" + path)) +
((domain == null) ? "" : ("; domain=" + domain)) +
((secure == true) ? "; secure" : "");
}
function cookieForms() {
var mode = cookieForms.arguments[0];
for(f=1; f<cookieForms.arguments.length; f++) {
formName = cookieForms.arguments[f];
if(mode == 'open') {
cookieValue = GetCookie('saved_'+formName);
if(cookieValue != null) {
var cookieArray = cookieValue.split('#cf#');
if(cookieArray.length == document[formName].elements.length) {
for(i=0; i<document[formName].elements.length; i++) {
if(cookieArray.substring(0,6) == 'select') { document[formName].elements.options.selectedIndex = cookieArray.substring(7, cookieArray.length-1); }
else if((cookieArray == 'cbtrue') || (cookieArray == 'rbtrue')) { document[formName].elements.checked = true; }
else if((cookieArray == 'cbfalse') || (cookieArray == 'rbfalse')) { document[formName].elements.checked = false; }
else { document[formName].elements.value = (cookieArray) ? cookieArray : ''; }
}
}
}
}
if(mode == 'save') {
cookieValue = '';
for(i=0; i<document[formName].elements.length; i++) {
fieldType = document[formName].elements.type;
if(fieldType == 'password') { passValue = ''; }
else if(fieldType == 'checkbox') { passValue = 'cb'+document[formName].elements.checked; }
else if(fieldType == 'radio') { passValue = 'rb'+document[formName].elements.checked; }
else if(fieldType == 'select-one') { passValue = 'select'+document[formName].elements.options.selectedIndex; }
else { passValue = document[formName].elements.value; }
cookieValue = cookieValue + passValue + '#cf#';
}
cookieValue = cookieValue.substring(0, cookieValue.length-4);
SetCookie('saved_'+formName, cookieValue, exp);
}
}
}
The script is called via this <BODY> command:
<body onload="cookieForms('open', 'calculations'); showButton();" onunload="cookieForms('save', 'calculations')">
Is there a way that the above script could be modified so that is only records the visible input fields and ignores the hidden ones? Thank you.
Hugz
Jenny
I am using the following script to record inside a cookie form elements that can be recalled on a future visit. I works great but it is recording "hidden" fields as well as standard input fields and this causes big problems for its application. Here is the script:
var expDays = 100;
var exp = new Date();
exp.setTime(exp.getTime() + (expDays*24*60*60*1000));
function getCookieVal (offset) {
var endstr = document.cookie.indexOf (";", offset);
if (endstr == -1) { endstr = document.cookie.length; }
return unescape(document.cookie.substring(offset, endstr));
}
function GetCookie (name) {
var arg = name + "=";
var alen = arg.length;
var clen = document.cookie.length;
var i = 0;
while (i < clen) {
var j = i + alen;
if (document.cookie.substring(i, j) == arg) return getCookieVal (j);
i = document.cookie.indexOf(" ", i) + 1;
if (i == 0) break;
}
return null;
}
function SetCookie (name, value) {
var argv = SetCookie.arguments;
var argc = SetCookie.arguments.length;
var expires = (argc > 2) ? argv[2] : null;
var path = (argc > 3) ? argv[3] : null;
var domain = (argc > 4) ? argv[4] : null;
var secure = (argc > 5) ? argv[5] : false;
document.cookie = name + "=" + escape (value) +
((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
((path == null) ? "" : ("; path=" + path)) +
((domain == null) ? "" : ("; domain=" + domain)) +
((secure == true) ? "; secure" : "");
}
function cookieForms() {
var mode = cookieForms.arguments[0];
for(f=1; f<cookieForms.arguments.length; f++) {
formName = cookieForms.arguments[f];
if(mode == 'open') {
cookieValue = GetCookie('saved_'+formName);
if(cookieValue != null) {
var cookieArray = cookieValue.split('#cf#');
if(cookieArray.length == document[formName].elements.length) {
for(i=0; i<document[formName].elements.length; i++) {
if(cookieArray.substring(0,6) == 'select') { document[formName].elements.options.selectedIndex = cookieArray.substring(7, cookieArray.length-1); }
else if((cookieArray == 'cbtrue') || (cookieArray == 'rbtrue')) { document[formName].elements.checked = true; }
else if((cookieArray == 'cbfalse') || (cookieArray == 'rbfalse')) { document[formName].elements.checked = false; }
else { document[formName].elements.value = (cookieArray) ? cookieArray : ''; }
}
}
}
}
if(mode == 'save') {
cookieValue = '';
for(i=0; i<document[formName].elements.length; i++) {
fieldType = document[formName].elements.type;
if(fieldType == 'password') { passValue = ''; }
else if(fieldType == 'checkbox') { passValue = 'cb'+document[formName].elements.checked; }
else if(fieldType == 'radio') { passValue = 'rb'+document[formName].elements.checked; }
else if(fieldType == 'select-one') { passValue = 'select'+document[formName].elements.options.selectedIndex; }
else { passValue = document[formName].elements.value; }
cookieValue = cookieValue + passValue + '#cf#';
}
cookieValue = cookieValue.substring(0, cookieValue.length-4);
SetCookie('saved_'+formName, cookieValue, exp);
}
}
}
The script is called via this <BODY> command:
<body onload="cookieForms('open', 'calculations'); showButton();" onunload="cookieForms('save', 'calculations')">
Is there a way that the above script could be modified so that is only records the visible input fields and ignores the hidden ones? Thank you.
Hugz
Jenny