我有一个 joomla 网站,我正在使用 rsform 组件创建一个多页表单。在提交表单之前,我将所有输入字段值保存在 cookie 中,以防用户决定他们无法完成填写表单。因此,如果用户返回,我有一个函数将获取 cookie 并遍历表单并使用存储在 cookie 中的值填充表单字段。我可以创建和读取 cookie,但无法重新填充表单。这是流程。
- 用户访问网站,网站检查他们是否在机器上存储了 cookie,如果没有创建。
- 当用户单击按钮转到下一个表单视图时,cookie 会被填充,当时我采用表单并从中创建一个 json 字符串化序列化数组并将其传递给要存储的 cookie。
但我注意到,直到我大约三个表单视图深度时,cookie 才会填充值。例如,如果我填写前两个文本区域并单击下一步按钮进入下一个表单视图,在控制台中我会看到 cookie 密钥对,但值是空的。但是,如果我填写下一个 textarea 并单击下一个按钮,我可以在控制台中看到前两个 textarea 的值,但看不到我刚刚填写的 textarea。我希望你们能明白我想说什么。我已经在这几个星期了,我无法弄清楚,所以非常感谢任何帮助。这是http://hearwithyourheartusa.com/index.php/share-your-story表单的链接。可能更容易看到我想说什么,而不是试图理解我刚刚输入的内容。
编辑 这是我用来设置和获取 cookie 的代码以及应该使用 ccokie 的值填充表单的代码。我也有一个 jsfiddle,但它拒绝设置 cookie,但如果你想试一试,这里是链接http://jsfiddle.net/Uqj4x/
function createCookie(name,value,days) {
var expires = "";
if (days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}
document.cookie = name+"="+value+expires+"; path=/";
}
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)===' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
function string2form($form, serializedStr) {
var fields = JSON.parse(serializedStr);
for (var i = 0; i < fields.length; i++) {
var controlName = fields[i].name;
var controlValue = fields[i].value;
$form.find("[name='+ controlName +']").attr('value',controlValue);
//document.getElementsByName(controlName).value = controlValue;
//console.log('field name='+controlName+' field value='+controlValue);
}
console.log('form values are - '+JSON.stringify(jQuery('#userForm').serializeArray()));
var cookie = readCookie('storyCookie');
console.log('the cookie values are '+cookie);
}
jQuery('#userForm input:button').click(function() {
// jQuery.ajax({
// cache: false,
// type: 'POST',
// url: 'http://hearwithyourheartusa.com/templates/jsn_boot_pro/customPHP/ajaxcookie.php',
// data: JSON.stringify(jQuery('#userForm').serializeArray()),
// contentType:"application/json; charset=utf-8",
// dataType: 'json',
// success: function(data){
// alert(data);
// }
// });
console.log(id);
createCookie('storyCookie',JSON.stringify(jQuery('#userForm').serializeArray()),365);
var cookie = readCookie('storyCookie');
console.log('the cookie is '+cookie);
});