2012-09-24 40 views
1

後,我需要的是這樣的:IE8填滿了錯誤的數據表單域打後退按鈕

  • 用戶加載頁面(輸入爲空)
  • 用戶提供了一些輸入並提交
  • 輸入有它們的新值
  • 用戶返回
  • 的輸入時,其先前的值

我的PHP文件看起來像這樣:

<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
</head> 
<body> 
    <form id="formTest" name="formTest" action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post" autocomplete="off"> 
     <select id="selectTest" name="selectTest"> 
      <option value=0 <?php if(isset($_POST['selectTest']) && $_POST['selectTest']==0){echo 'selected=\'selected\'';} ?>>Select an option...</option> 
      <option value=1 <?php if(isset($_POST['selectTest']) && $_POST['selectTest']==1){echo 'selected=\'selected\'';} ?>>Option 1</option> 
      <option value=2 <?php if(isset($_POST['selectTest']) && $_POST['selectTest']==2){echo 'selected=\'selected\'';} ?>>Option 2</option>   
     </select> 
     <br/> 
     <input id="inputTest" name="inputTest" type="text" value="<?php if(isset($_POST['inputTest'])){echo htmlentities($_POST['inputTest']);} ?>" />   
     <br/> 
     <input type="submit" value="OK" /> 
    </form> 
    <?php 
     print_r($_POST); 
    ?> 
</body> 
</html> 

正如你可以看到後,提交表單「記住」它的數據。當用戶點擊瀏覽器的「後退」按鈕時,會出現此問題。雖然POST數組具有前一個狀態的值,但瀏覽器會使用下一個狀態的數據填充字段(使用提交後的數據)。

儘管我可以在Chrome和Firefox中管理此問題,但關閉了窗體的自動完成屬性,但這在IE8中沒有任何結果。

任何建議將不勝感激!

回答

1

這聽起來像你希望表單總是顯示你在PHP中回顯的值?快速和骯髒的解決方法是重置表單頁面加載時:

<body onload="document.forms[0].reset();"> 

您可能需要更新不同的頁面結構,其onload屬性,或者你可以做到這一點更優雅,如果你的實際應用中使用jQuery和你給表格一個ID。

我相信有一種方法可以關閉IE中的自動完成/歷史記錄。我不得不穀歌。編輯:好的,我做了...看起來像你有IE正在尋找的窗體屬性。我不認爲這實際上是一個自動完成問題,因爲後退按鈕試圖重新創建頁面的最後一個狀態......包括更改用戶所做的,特別是填寫字段。

下面是當文檔準備就緒時重置表單的jQuery方法(包括後退按鈕)......奇怪的是,jQuery沒有實現表單的reset()方法,所以[0]會讓你生DOM元素。把這些行添加到你的頭上;替換您的服務器上的本地jQuery(如果可用並且首選):

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> 
<script> 
$(function(){$("#formTest")[0].reset();}); 
</script> 
+0

非常感謝!這就是我一直在尋找的。我使用這個小javascript函數來重置窗體:** function resetForm(id){$('#'+ id).each(function(){this.reset();});} ** –

0

如果您通過某種持久性結構(想到會話範圍)運行它們,您可以將它設置爲表單上的條件。所以如果它沒有看到表單變量(這是post傳遞和詢問表單的東西)。所以這個語句會替換post isset,而是檢查struct'session'(或者其他一些作用域)是否存在,以及是否存在。合理?我希望這有幫助。