1

我需要的是这个:

  • 用户加载页面(输入为空)
  • 用户提供一些输入并提交
  • 输入有它们的新值
  • 用户导航回来
  • 输入有它们以前的值

我的 php 文件如下所示:

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
    <form id="formTest" name="formTest" action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post" autocomplete="off">
        <select id="selectTest" name="selectTest">
            <option value=0 <?php if(isset($_POST['selectTest']) && $_POST['selectTest']==0){echo 'selected=\'selected\'';} ?>>Select an option...</option>
            <option value=1 <?php if(isset($_POST['selectTest']) && $_POST['selectTest']==1){echo 'selected=\'selected\'';} ?>>Option 1</option>
            <option value=2 <?php if(isset($_POST['selectTest']) && $_POST['selectTest']==2){echo 'selected=\'selected\'';} ?>>Option 2</option>        
        </select>
        <br/>
        <input id="inputTest" name="inputTest" type="text" value="<?php if(isset($_POST['inputTest'])){echo htmlentities($_POST['inputTest']);} ?>" />          
        <br/>
        <input type="submit" value="OK" />
    </form>
    <?php
        print_r($_POST);
    ?>
</body>
</html>

如您所见,表单在提交后“记住”其数据。当用户点击浏览器的后退按钮时,就会出现问题。尽管 POST 数组具有前一个状态的值,但浏览器会用下一个状态的数据(提交后的数据)填充字段。

虽然我可以通过关闭表单的自动完成属性在 Chrome 和 Firefox 中解决这个问题,但这在 IE8 中没有结果。

我们欢迎所有的建议!

4

2 回答 2

1

听起来您希望表单始终显示您在 PHP 中回显的值?一个快速而肮脏的解决方法是在页面加载时重置表单:

<body onload="document.forms[0].reset();">

您可能需要为不同的页面结构更新 onload 属性,或者如果您的实际应用程序使用 jQuery 并且您为表单提供 ID,您可以更优雅地完成此操作。

我相信也有一种方法可以在 IE 中关闭每个字段的自动完成/历史记录。我必须用谷歌搜索。编辑:好的,我做了......看起来你有 IE 正在寻找的表单属性。我不认为这实际上是一个自动完成问题,因为后退按钮试图重新创建页面的最后状态......包括用户所做的更改,特别是填写字段。

这是在文档准备好时重置表单的 jQuery 方法(包括后退按钮)......奇怪的是,jQuery 没有实现表单的 reset() 方法,因此 [0] 为您获取原始 DOM 元素。将这些行添加到您的脑海中;如果可用且首选,请在您的服务器上替换本地 jquery:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script>
$(function(){$("#formTest")[0].reset();});
</script>
于 2012-09-24T17:26:57.793 回答
0

如果您通过某种持久结构(想到会话范围)运行它们,则可以将其设置为表单的条件。因此,如果它没有看到表单变量(这是用于传递和询问表单内容的帖子)。因此,该语句将替换 post isset,而是检查结构“会话”(或其他范围)是否存在以及是否存在。有道理?我希望这有帮助。

于 2012-09-24T17:24:46.373 回答