当网页表单被提交并跳转到另一个页面时,用户通常会点击“返回”按钮以重新提交表单(在我的情况下,表单是高级搜索)。如何可靠地保留用户选择的表单选项,以便当他们点击“返回”时不必重新填写整个表单(如果他们只更改了许多表单元素中的一个)?我需要通过存储会话数据(cookie或服务器端)的方式来实现吗?还是有一种方法可以让浏览器帮我处理这个问题?(环境为PHP/JavaScript,且该站点必须在IE6+和Firefox2+上运行。)
我会把它放在会话中。
这将是最可靠的,即使他们不直接“返回”,它仍将保留他们的搜索选项。
把它放在 cookie 中也可以,但除非表单很小,否则不建议这样做。
这取决于浏览器,在大多数情况下你不需要做任何事情。
IE,Firefox等浏览器会愉快地记住上一个页面表单的内容,并在点击返回按钮时再次显示出来...只要您不做任何阻止此功能的操作,例如使页面无缓存或完全从脚本构建表单。
(将内容放入会话中可能会混淆同时打开同一表单的两个标签页的浏览器。在执行此类操作时,请非常小心。)
你也可以通过JavaScript在本地完成所有操作。因此,您可以使用cookie存储搜索值,并在页面加载时检查cookie是否存在。类似于以下内容:
$('#formSubmitButton').click( function() {
var value = $('#searchbox').val();
var days = 1;
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
document.cookie = "searchbox="+value+expires+"; path=/";
});
$(document).ready( function() {
var nameEQ = "searchbox=";
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) var valueC = c.substring(nameEQ.length,c.length);
}
$('#searchbox').val(valueC);
});
尚未测试此代码但应该有效。你需要 jQuery 的支持。
Cookie 函数源自:http://www.quirksmode.org/js/cookies.html
顺便说一下,无论是 Firefox 还是 IE 都默认有这种行为。
$( document ).ready( function() {
$.getJSON(
"/getformdata.php",
function( data ) {
$.each( data.items, function(i,item) {
$( '#' + item.eid ).val( item.val );
} );
});
} );
你的/getformdata.php可能会返回以下数据:
{
'items': [
{
'eid': 'formfield1',
'val': 'John',
},
{
'eid': 'formfield2',
'val': 'Doe',
}
]
}
如果会话中还没有保存任何内容,它显然会返回一个空数组。上面的代码粗略且未经测试,但这应该可以给你基本的想法。
顺便说一下:当前版本的Opera和Firefox在返回时会保留表单字段内容。您的JS代码将覆盖此内容,但这应该是安全的。
另一种使用 Ajax 的选项(因此不适用于没有启用 JavaScript 的用户)是通过 JavaScript 提交表单,然后转到确认页面(或通过将按钮替换为消息在表单上显示消息)。这样就没有“返回”可能了。