2012-09-25 16 views
0

我正在处理一个调查多步表单与许多收音机。如何在按下浏览器后退按钮时保持无线电选择状态?

他们有一些默认状态

用户操作他们来选择他的偏好。

现在客户希望在点击任一浏览器后退按钮或侧面导航链接(一组指向调查前面阶段的链接)时让用户先前选择的无线电状态。

这里是导航的样子:

<ul> 
<li><a href="index.php?site=form1">Step1</a></li> 
<li><a href="index.php?site=form2">Step2</a></li> 
<li><a href="index.php?site=form3">Step3</a></li> 
</ul> 

只有一个$ _SESSION,在整个调查收集数据。

我知道我可以直接从$ _SESSION加载信息,但是当请求来自导航链接/返回按钮时,我需要替换默认状态。

+0

你的意思是,如果他们去任何他们选择的页面应该记住?服务器端还是用户端? –

+0

'localStorage'可能是您最好的选择。 –

+0

@Pez Cuckow:我的意思是用户端。对马道拉Uchiha:好主意,但不知道检查用户支持是多么容易。 – Faraderegele

回答

0

有两种主要方法可以解决这个问题,基本上你就是说无线电的选择状态需要保存在表单的不同页面之间。

所以,当你返回到你以前的页面,但没有提交,选择应该仍然是一样的。

有两个关键的方法,服务器端用PHP或客户端的JavaScript

PHP

您可以设置任何链接的网站上提交表单,你可以保存无线电选择,那么当您创建表单时,您可以查看之前选择的值

此信息可保存在$_SESSION中,但他们需要在每次更改页面时提交表单(您可以更改链接以执行此操作)

的Javascript

你可以写一些JavaScript是想起了选择的内容并将其存储在用户浏览器作为cookie,这可能会更新每次他们点击一个按钮。当页面加载时,javascript会检查cookie(或本地存储)并加载以前的选项。

当他们完成并提交表单你会清除JavaScript

基本例如

$('form input[type=radio]:checked') 

一旦我有更多的信息,我会充实这个答案进一步

+0

单选按钮上已经有默认状态。 1.如何用$ _SESSION中的信息替换它们? 2.如何检测请求来自调查的后期状态? – Faraderegele

0

发布形式后,你可以保存会话中的值。当再次访问前一页(甚至是第一次加载时)时,请阅读会话的值并检查指定的无线电。如果您第一次访问页面,会话中将没有数据,因此不会检查任何人。

您还可以通过JavaScript和cookies生动地存储选定的值。

+0

我想用你的想法。你能建议我如何使用$ _SESSION中的信息来改变checked =“checked”状态吗? – Faraderegele

+0

value =“”id =“”name =“”/> – Chris

0

一个非常简单可行的解决方案:

<?php 
    session_start(); // this needs to be at the top of all pages using $_SESSION (before anything else) else $_SESSION will always be empty 
    if($_POST['vehicle']){ 
     $_SESSION['checkbox1'] = $_POST['vehicle']; 
    } 
print_r($_SESSION); // remove this line after testing. It will show you the contents of the $_SESSION, which is handy for seeing when variables are set within it 
?> 

<!DOCTYPE html> 
<html> 
<body> 
<form action="" method="post"> 
    <input type="checkbox" name="vehicle" value="Bike"<?php if($_SESSION['checkbox1'] == "Bike"){ echo " checked"}?>>I have a bike<br /> 
    <input type="checkbox" name="vehicle" value="Car"<?php if($_SESSION['checkbox1'] == "Car"){ echo " checked"}?>>I have a car <br /># 
    <input type="submit" value="Go" /> 
</form> 
</body> 
</html> 

你可以在一个隐藏的输入区域中添加的第一个页面生成一个唯一的ID发布可以形成会话变量名称的一部分的时候。从那里,信息将在该变量名下的$ _SESSION中编入索引,从而更容易将数据拉回或创建新的表单会话。

希望我没有失去你。

+0

I试过你的解决方案问题是,在我的多步骤中,'$ _POST ['vehicle']'在form1上始终是空的(第一步)。我只能在下一页显示它,然后当我恢复为空时。我必须承认,我不明白为什么这个变量在回去时会重置。 – Faraderegele

+0

球。我忘了把session_start();在PHP代码的顶部之前。请参阅编辑的代码。 :S菜鸟错误哈哈 – Chris

+0

不,不,我已经做到了。会议工作正常。只有这是一个多形式我使用action =“<?php print $ config ['baseurl'];?>/index.php?site = form2”所以没有会话集在窗体1上 – Faraderegele

相关问题