我有一个页面,其中有几个复选框需要表示数据库中的状态。复选框是AJAX驱动的,因此当选中一个复选框时,会向数据库中的更新状态发送请求。如果他们的视图过时,则会更新受影响/相关复选框的视图,并通知用户,并且必须再次尝试。当我刷新时,我想要复选框来表示从数据库中的数据生成的HTML中实际返回的内容,不一些任意的先前用户与输入元素的交互。
我该怎么做才能让Firefox不更新我与之交互过的复选框,因此它们与新收到的HTML中的状态相同?
问题很混乱,因为:
当我在Firefox中刷新页面并在新接收的HTML中更新复选框的checked属性时,Firefox将更新视图,正如我所期望的那样。
但是,如果我与复选框进行交互,然后刷新,则不会根据新收到的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中不存在checked属性,但JavaScript认为checked属性被“检查”。因此在Firefox恢复后无法从接收到的源恢复值来自先前输入的值。
反过来也是如此......来源说checked="checked"
并且onload JavaScript认为已检查undefined
。
警告第一个复选框状态的来源。
window.onload = function() {
$('input[type="checkbox"]').each(function() {
alert($(this).attr('checked'));
return false
});
}
答案 0 :(得分:1)
document.formname.reset()
工作,似乎从最初的HTML中恢复。这是我尝试的唯一方法......
感谢Dennis发布了类似问题的答案。 Firefox: How to reload form *without* caching user-input?
此解决方案的唯一问题是我不需要表单,并且不使用表单或提交表单等。我使用这些复选框来创建用户界面,这似乎是完全有效的用途case,但为了使其工作,我需要将所有输入与表单相关联。