防止Firefox在刷新后恢复先前用户输入的状态

时间:2012-03-15 19:50:57

标签: html firefox

我有一个页面,其中有几个复选框需要表示数据库中的状态。复选框是AJAX驱动的,因此当选中一个复选框时,会向数据库中的更新状态发送请求。如果他们的视图过时,则会更新受影响/相关复选框的视图,并通知用户,并且必须再次尝试。当我刷新时,我想要复选框来表示从数据库中的数据生成的HTML中实际返回的内容,一些任意的先前用户与输入元素的交互。

我该怎么做才能让Firefox不更新我与之交互过的复选框,因此它们与新收到的HTML中的状态相同?

问题很混乱,因为:

  1. 当我在Firefox中刷新页面并在新接收的HTML中更新复选框的checked属性时,Firefox将更新视图,正如我所期望的那样。

  2. 但是,如果我与复选框进行交互,然后刷新,则不会根据新收到的HTML更新该复选框。

  3. 即。如果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
        });
    }
    

1 个答案:

答案 0 :(得分:1)

document.formname.reset()工作,似乎从最初的HTML中恢复。这是我尝试的唯一方法......

感谢Dennis发布了类似问题的答案。 Firefox: How to reload form *without* caching user-input?

此解决方案的唯一问题是我不需要表单,并且不使用表单或提交表单等。我使用这些复选框来创建用户界面,这似乎是完全有效的用途case,但为了使其工作,我需要将所有输入与表单相关联。