2012-02-10 51 views
0

我有一個DIV,slideToggles沒有問題。它揭示了訪問者的一些額外選項。表單提交後,如果遇到錯誤,訪問者按下瀏覽器後退按鈕進行糾正。與所有額外的選項的div是不是在最後左邊的狀態,而是它崩潰了。任何想法如何我可以防止這一點?Jquery SlideToggle預覽狀態瀏覽器後退按鈕

$("#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忘記隱藏的字段值,但不是文本字段值,所以我將文本字段包裝在顯示器中:none div,它記住了值,但是在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是相同的,但與添加的formfield

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

我不喜歡這個,但無法找到另一種方式。上面是一樣的只是增加了一個超時的,如果sendWhenState == 1,使Opera將有更新的領域之前,我檢查,像這樣的價值:

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

我是新來的,應該我已經回答了我的自己的問題,還是我有權利用我提出的解決方案來編輯​​問題?

+2

發表一些代碼。你可以設置一個cookie – 2012-02-10 05:52:02

+0

我寧願避免爲此使用cookie。如何隱藏表單字段呢? – dannix 2012-02-11 02:49:16

+0

我試着用一個隱藏字段,似乎至少在FF中工作。任何人都知道這種方法的任何跨瀏覽器問題? – dannix 2012-02-11 03:20:16

回答

0

我添加了一個在FF中工作但不是Opera的隱藏文本字段。 Opera忘記隱藏的字段值,但不是文本字段值,所以我將文本字段包裝在顯示器中:none div,它記住了值,但是在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是相同的,但與添加的formfield

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

我不喜歡這個,但無法找到另一種方式。上面是相同的只是增加了一個超時,如果sendWhenState == 1,以便在我檢查它們的值之前Opera會更新字段,如下所示:

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