[英]Jquery show/hide resetting when page reloads
我是jquery的新手,但是我试图使用它来创建多步骤的选项卡式表单。
在其中一页中,我具有单选按钮,该单选按钮将根据选择的内容显示多个字段。
我发现的问题是,如果用户在选择单选按钮后刷新页面,页面将重新加载并隐藏所有div,但它会记住所选的单选按钮选择。
有没有一种方法可以最初隐藏div,而无需在页面加载后明确告诉它发生? 也许让jquery记住的一些(简便)方法可以记住隐藏的div和显示的div?
谢谢!
<label for="paymentmethod">Payment Method</label>
<input type="radio" name="paymentmethod" id="paymentmethod" value="creditcard">Visa/Mastercard
<input type="radio" name="paymentmethod" id="paymentmethod" value="cheque">Cheque
<div id="divcredit">
Stuff
</div>
<div id="divcheque">
Stuff
</div>
这是我拥有的jQuery代码:
$(document).ready(function() {
//...stuff
$("#divcredit").hide();
$("#divcheque").hide();
$("input[name='paymentmethod']").change(function() {
if( $("input[name='paymentmethod']:checked").val() == "cheque")
{
$("#divcredit").hide();
$("#divcheque").show();
}
else if($("input[name='paymentmethod']:checked").val()== "creditcard")
{
$("#divcredit").show();
$("#divcheque").hide();
}
});
var setPaymentDivs = function() {
var selected = $('input[name="paymentmethod"]:checked').val();
$('div.payment').hide();
$('#div' + selected).show();
};
$(function() {
setPaymentDivs();
$('input[name="paymentmethod"]').change(setPaymentDivs);
});
并将class="payment"
添加到div中。 这滥用了后退按钮和刷新记住表单值的事实。
另一种方法是对当前状态进行编码-在cookie中,在URL哈希中...然后在加载时将其提取并相应地设置所有值。 优点是,即使关闭浏览器,也可以使用它;对于URL散列,即使将URL粘贴到朋友的浏览器中,它也可以工作。 (嗯,也许不是用于支付系统:D,但您知道我的意思)
Cookies是您的朋友。
http://www.quirksmode.org/js/cookies.html
-或使用jQuery插件-
http://plugins.jquery.com/cookie
或者,localStorage是您的朋友!
$(document).ready(function() {
//...stuff
if (localStorage['payment']) {
if (localStorage['payment'] === 'credit')
$("#divcheque").hide();
else
$("#divcredit").hide();
}
else {
$("#divcheque").hide();
$("#divcredit").hide();
}
$("input[name='paymentmethod']").change(function() {
if( $("input[name='paymentmethod']:checked").val() == "cheque")
{
$("#divcredit").hide();
$("#divcheque").show();
localStorage['payment'] = 'cheque';
}
else if($("input[name='paymentmethod']:checked").val()== "creditcard")
{
$("#divcredit").show();
$("#divcheque").hide();
localStorage['payment'] = 'credit';
}
});
http://diveintohtml5.ep.io/storage.html
为了实现跨浏览器的兼容性,请使用cookie。 但是,无论哪种方式,它都可以在您的用户离开一段时间后仍然有效。 您可能想要或可能不想要的东西。
配置更改事件后,请尝试。
if( $("input[name='paymentmethod']:checked").length > 0){
$("input[name='paymentmethod']").change();
}
这意味着,在加载页面后,请检查是否有选择的选项并触发事件以获取所需的行为
您可能想要使用的是jQuery历史记录插件 (其中之一)。 这将使浏览器可以基于哈希返回所需的div。
但是,如果您依靠页面在刷新时保持选中/未选中的值,则只有在为其添加代码后才能正常工作。 就是 并非所有浏览器都会在刷新页面时保留表单值,除非已明确设置页面为刷新页面。 这最有可能意味着通过ajax发布数据,将信息存储在会话中,并使页面在输出时将其考虑在内。
通过提取一个方法来稍微修改您的jquery:
$(document).ready(function() {
//...stuff
ShowHidePanels();
$("input[name='paymentmethod']").change(function() {
ShowHidePanels();
});
function ShowHidePanels(){
if( $("input[name='paymentmethod']:checked").val() == "cheque")
{
$("#divcredit").hide();
$("#divcheque").show();
}
else if($("input[name='paymentmethod']:checked").val()== "creditcard")
{
$("#divcredit").show();
$("#divcheque").hide();
}
};
});
哇,我很慢,无论如何这是我的解决方案:
http://jsfiddle.net/FerMU/
另外,您会对复选框上的标签和ID感到困惑。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.