【问题标题】:Making IE "forget" information entered in form when using back button使用后退按钮时使IE“忘记”在表单中输入的信息
【发布时间】:2011-01-06 17:32:59
【问题描述】:

我有一个带有表单的页面,其中许多字段都是从 URL 中传递的变量中填充的。这些字段被禁用(不可编辑)并且仅供用户查看。

其余字段需要用户输入并且未被禁用(可编辑)。提交表单后,会出现一个确认页面。在这种情况下,用户可能需要提交其中的几个表单,其中不可编辑的信息在表单之间是相同的,因此能够从确认页面返回到表单页面将节省大量时间。

我希望它的工作方式是当用户按下后退按钮时,所有 NON-EDITABLE 字段都被填充,但 EDITABLE 字段为空白。这就是 Firefox 正在做的事情,但 IE8 不会“忘记”在 EDITABLE 字段中输入的内容。

要禁用缓存,我的页面开头和结尾会显示以下内容。

<head>
    <meta http-equiv="Pragma" content="no-cache"/>
    <meta http-equiv="Cache-Control" content="no-store"/>
<head/>

我还需要做什么才能让 IE 在按下返回按钮时忘记在 EDITABLE 字段中输入的内容?

如果重要的话,我所有的页面都是用 PHP 生成的。

编辑:

在我看来,这是 IE 缓存我的页面的问题,即使我已经告诉它不要这样做。我的meta 标签正确吗?我是否需要做其他事情来防止 IE 缓存我的页面?

【问题讨论】:

    标签: html internet-explorer forms browser-cache


    【解决方案1】:

    您是否尝试将autocomplete='off' 属性添加到表单字段?

    例如这样的:

    <input type='text' name='myfield' size='10' autocomplete='off'>
    

    【讨论】:

    • 不起作用,而且我真的不想关闭自动完成功能。似乎 IE 仍在缓存页面,即使我已经告诉它不要 :(
    【解决方案2】:

    我找到了这段代码 sn-p,它似乎可以做我想做的事。

        <input type="hidden" id="refreshed" value="no"/>
        <script type="text/javascript">
    
            onload=function(){
                var e=document.getElementById("refreshed");
                if(e.value=="no"){
                    e.value="yes";
                }
    
                else{
                    e.value="no";
                    location.reload();
                }
    
            }
    
        </script>   
    

    更新:

    上述解决方案在 IE 中有效,但我发现它在 Firefox 中无效。进一步探索这种情况,我终于在一些 SO 帮助下解决了我的问题。下面是一个更好的解决方案,把它放在你的 DOCTYPE 标题之上。更多详情here.

    <?php
    header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
    header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
    ?>
    

    【讨论】:

      【解决方案3】:

      为什么不直接重定向回表单,而不是让他们点击后退按钮(有一个链接显示“Enter More”可以返回表单)?

      这样,当页面加载时,您可以将输入默认设置为空白值

      例子

      <input type="textbox" name="somename" value="">
      

      【讨论】:

      • 我也会这样做,但我需要考虑用户点击后退按钮(即使我不希望他们不点击后退按钮,我也无法阻止他们)。跨度>
      • 其实你可以,捕获页面onbeforeunload事件并询问用户是否要输入更多数据,如果是,则对表单页面执行window.location,如果回答否,则简单地返回true;
      猜你喜欢
      • 2012-08-22
      • 2010-09-08
      • 1970-01-01
      • 2020-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-08
      相关资源
      最近更新 更多