2011-04-22 30 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