2011-04-22 31 views
2

在某些表單數據被修改後(通過AJAX)使用重載按鈕時,我遇到了Firefox中的一個錯誤,該錯誤涉及到表單上的一些不同步信息。firefox與處理多個(重複)帖子有什麼不同?

在IE(7)中,刷新似乎總是重新提交最初提交的數據。所以,如果我加載一個通過JS/AJAX進行修改並刷新的表單,我會看到我在第一次加載時看到的內容。

在Firefox(4)中,我傾向於(至少在這種情況下)看到較新的數據。但是,由於我忽略更新某些表單元素,表單似乎會以部分不正確的數據重新提交,在這種情況下可能會導致嚴重的混淆。

我的問題是,Firefox和IE處理重新發布的方式究竟有什麼不同?它記錄在任何地方嗎?無論哪種方式更標準?那麼其他瀏覽器呢?可能值得注意的是,Firefox似乎只重新渲染了某些元素(在我的情況下,標籤的類發生了變化,而不是輸入的禁用狀態)。 Firefox在刷新和重新發布時如何更新DOM?

我檢查了FF中(重新)POST的返回值,並確認它有一些不尋常的行爲。在返回的源代碼中,我得到以下位:

<label id="delSheetContainer" 
     title="Estimate Sheets with Schedule Activities in the past may not be deleted." 
     class=""> 
    <input id="delSheet" name="delSheet" 
     type="checkbox" 
     tabindex="3" 
     value="false" 
     //Inserted note: this is where the disabled value would have been 
     onclick="this.value=(this.value && 1); bSave=true; setBtn(this.checked);" 
    />Delete Sheet 
</label> 

但是在瀏覽器(和Firebug)中,我看到一個仍然禁用的複選框。但是,標籤已經正確更新。任何人都可以詳細說明這種行爲嗎? (引用讚賞!)

編輯:正如鮑里斯解釋的那樣,Firefox在整個刷新過程中都保持「表單狀態」。我的問題實際上是由這個事實造成的;服務器正在返回正確的東西,但Firefox仍然維持表單狀態。

+0

現在我感覺比以前更困惑了...我不得不再做更多的測試,這樣我可以更清楚地理解這一點......我會在發生這種情況時進一步更新問題。 – jtpereyda 2011-04-22 19:29:00

回答

1

很難確定你在這裏看到的效果是基於描述的,但是當你做一個重載(而不是強制重載)時,Firefox會將修改過的輸入值保留在任何值上之前重新加載。

所以,如果你有這個標記的頁面:在「富」到文本框中的用戶類型

<input name="x"> 

和,然後重新加載,重裝後的輸入將仍然包含字符串「foo」。

這適用於隱藏的輸入,其值也通過JavaScript進行修改,這可能會解釋您觀察到的行爲。

真的沒有標準覆蓋重載行爲。

+0

@Boris謝謝,這是有道理的。任何關於渲染的想法? – jtpereyda 2011-04-22 18:55:21

+0

@Boris似乎未更新的元素並不會真正引起渲染差異(請參閱編輯)。編輯:實際上,我不知道...堅持... – jtpereyda 2011-04-22 18:57:13

+0

@Boris我遇到的問題是,首先獲取到頁面的表單與頁面上的表單不同,所以使用getElementById更新表單元素不起作用。 – jtpereyda 2011-04-22 19:17:21