浏览器后退按钮后的Jquery SlideToggle presist状态

时间:2012-02-10 05:49:07

标签: jquery opera slidetoggle

我有一个DIV,slideToggles没问题。它向访客展示了一些其他选项。提交表单后,如果遇到错误,访问者按下浏览器后退按钮进行纠正。带有所有附加选项的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,但是在formfield的值由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 if sendWhenState == 1,以便Opera在我检查它们的值之前更新字段,如下所示:

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

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

1 个答案:

答案 0 :(得分:0)

我添加了一个隐藏文本字段,该字段在FF中工作但不在Opera中工作。 Opera会忘记隐藏的字段值,但不会忘记文本字段值,所以我将文本字段包装在display:none div中,它记住值ok,但是在formfield的值由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 if sendWhenState == 1,以便Opera在我检查它们的值之前更新字段,如下所示:

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