【问题标题】:Jquery SlideToggle presist state after browser back button浏览器后退按钮后的Jquery SlideToggle presist状态
【发布时间】:2012-02-10 05:49:07
【问题描述】:

我有一个滑动切换没有问题的DIV。它向访问者展示了一些额外的选项。提交表单后,如果遇到错误,访问者按下浏览器后退按钮进行纠正。带有所有附加选项的 div 不是最后离开的状态,而是折叠的状态。有什么办法可以防止这种情况发生吗?

    $("#sendChange").click(function () {
                          $("#sendSpec").slideToggle("slow");
                        if($('#sendWhen').html() == 'IMMEDIATLY'){
                           $('#sendWhen').html('AS SPECIFIED');
                        }else{
                           $('#sendWhen').html('IMMEDIATLY');
                        }
                        return false;
});




<div class="fcenter stdBox line25" style="margin-bottom:0px;" id="emlOptions">
<div>
     <label class="lab">Send email: </label><span id="sendWhen" class="blue">IMMEDIATLY</span> <a href="#" id="sendChange">[change]</a>
</div>
<div style="display:none" id="sendSpec">
    <label for="userTz" class="lab">Timezone: </label><select name="userTz" id="userTz" onchange="tzChange(this.value)" class="field" >
<option value="Pacific/Apia">(GMT-11:00) Midway Island, Samoa</option>
<option value="Pacific/Honolulu">(GMT-10:00) Hawaii</option>
...
</select>  <br />

<label for="delayTimeDate" class="lab">Time & Date: </label><input type="text" class="field" name="delayTimeDate" id="datepicker" />
<br /><br />
</div>

所以我尝试添加一个在 FF 中有效但在 Opera 中无效的隐藏文本字段。 Opera 忘记了隐藏字段的值,但没有忘记文本字段的值,所以我将文本字段包装在一个 display:none div 中,它记住了值 ok 但在表单字段的值被 Opera 浏览器更新之前 javascript 会触发。代码如下:

function sendSpec () {
                          $("#sendSpec").slideToggle("slow");
                        if($('#sendWhen').html() == 'IMMEDIATLY'){
                           $('#sendWhen').html('AS SPECIFIED');
                           $('#sendWhenState').val('1');
                        }else{
                           $('#sendWhen').html('IMMEDIATLY');
                           $('#sendWhenState').val('0');
                        }}

$("#sendChange").click(function () {
                     sendSpec();
                    return false;
});
if($('#sendWhenState').val() == 1){
    sendSpec();
}

HTML 相同,但添加了表单域

<div style="display:none"><input type="text" id="sendWhenState" value="0" /></div>

我不喜欢这样,但找不到其他方法。上面是一样的,只是在 if sendWhenState == 1 中添加了一个超时,这样 Opera 就会在我检查它们的值之前更新字段,如下所示:

setTimeout(function(){
                    if($('#sendWhenState').val() == 1){
                       sendSpec();
                    }
         },1000);

我是新来的,我应该回答我自己的问题还是用我想出的解决方案编辑问题是正确的?

【问题讨论】:

  • 发布一些代码。你可以设置一个cookie
  • 我宁愿避免为此使用 cookie。一个隐藏的表单域怎么样?
  • 我尝试使用隐藏字段,似乎至少可以在 FF 中使用。有人知道这种方法有任何跨浏览器问题吗?
  • 把代码贴在jsfiddle什么的
  • 我已经在上面发布了,我不喜欢链接到外部内容,以防它在以后被删除,从而使这个问题对其他人无用。

标签: jquery opera slidetoggle


【解决方案1】:

我添加了一个隐藏文本字段,该字段在 FF 中有效,但在 Opera 中无效。 Opera 忘记了隐藏字段的值,但没有忘记文本字段的值,所以我将文本字段包装在一个 display:none div 中,它记住了值 ok 但 javascript 在表单字段的值被 Opera 浏览器更新之前触发。代码如下:

function sendSpec () {
                          $("#sendSpec").slideToggle("slow");
                        if($('#sendWhen').html() == 'IMMEDIATLY'){
                           $('#sendWhen').html('AS SPECIFIED');
                           $('#sendWhenState').val('1');
                        }else{
                           $('#sendWhen').html('IMMEDIATLY');
                           $('#sendWhenState').val('0');
                        }}

$("#sendChange").click(function () {
                     sendSpec();
                    return false;
});
if($('#sendWhenState').val() == 1){
    sendSpec();
}

HTML 相同,但添加了表单域

<div style="display:none"><input type="text" id="sendWhenState" value="0" /></div>

我不喜欢这样,但找不到其他方法。上面是一样的,只是在 if sendWhenState == 1 中添加了一个超时,这样 Opera 就会在我检查它们的值之前更新字段,如下所示:

setTimeout(function(){
                    if($('#sendWhenState').val() == 1){
                       sendSpec();
                    }
         },1000);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-02
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    • 2016-05-30
    • 2011-02-17
    • 1970-01-01
    相关资源
    最近更新 更多