我有一个带有几个复选框的页面,这些复选框需要在数据库中表示状态。复选框是AJAX驱动的,因此当选中一个复选框时,会发送一个请求以更新数据库中的状态。如果其视图过时,则更新受影响/相关的视图复选框,并通知用户,并且必须重试。当我刷新时,我希望复选框表示从数据库中的数据生成的HTML中实际返回的内容,而不是以前与输入元素的某些任意用户交互。
如何使Firefox不更新这些与我交互过的复选框,使它们与新接收的HTML中的状态相同?
这个问题令人困惑,因为:
当我在火狐中刷新页面时,复选框的选中属性在新收到的中更新,火狐将按我的预期更新视图。但是,如果我与复选框交互,则刷新该复选框,则不会根据新收到的HTML.更新该复选框。
即。如果checked="checked"
或选中的属性是不存在的,那么Firerfox就会保持这种状态,除非我执行移位刷新。
我甚至添加了window.onunload = function(){};
,因为我认为它可能是由bfcache造成的,但事实并非如此。
尝试使用以下标题,但它仍然恢复了状态。
HTTP/1.1 200 OK
Date: Thu, 15 Mar 2012 21:19:02 GMT
Server: Apache/2.2.20 (Ubuntu)
Expires: 0
Pragma: no-cache
Cache-Control: no-cache, no-store, must-revalidate
Vary: Accept-Encoding
Content-Encoding: gzip
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html;charset=ISO-8859-1
尝试在元素上循环,尽管源html中不存在选中的属性,JavaScript认为选中的属性被“选中”,因此在Firefox恢复以前输入的值之后,无法从接收的源恢复值。
相反也是真的..。消息来源说,checked="checked"
和onload JavaScript考虑检查undefined
。
源,用于在第一个复选框的状态上发出警报。
window.onload = function() {
$('input[type="checkbox"]').each(function() {
alert($(this).attr('checked'));
return false
});
}
发布于 2012-03-15 13:52:29
document.formname.reset()
起作用了,这似乎是从原来的HTML恢复的。这是我尝试过的唯一有效的方法..。
感谢丹尼斯为类似的问题发布了这个答案。Firefox: How to reload form *without* caching user-input?
这个解决方案的唯一问题是,我不需要表单,也不使用表单,或者提交表单等等。我使用这些复选框创建一个用户界面,这似乎是一个完全有效的用例,但为了使其工作,我需要将所有输入与表单相关联。
https://stackoverflow.com/questions/9727117
复制