Jquery SlideToggle состояние после нажатия кнопки возврата браузера - PullRequest
0 голосов
/ 10 февраля 2012

У меня есть 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 забывает скрытые значения полей, но не значения текстового поля, поэтому я обернул текстовое поле в экран: нет 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);

Я новичок здесь, если мне нужноответил на мой собственный вопрос или я был прав, чтобы отредактировать вопрос с решением, которое я придумал?

1 Ответ

0 голосов
/ 24 октября 2012

Я добавил скрытое текстовое поле, которое работало в FF, но не в Opera. Opera забывает скрытые значения полей, но не значения текстового поля, поэтому я обернул текстовое поле в экран: нет 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);
...