1

私が必要とするのはこれです:

  • ユーザーがページをロードします (入力は null です)
  • ユーザーが何らかの入力を行って送信する
  • 入力には新しい値があります
  • ユーザーが戻る
  • 入力には以前の値があります

私の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 を置き換え、代わりに struct 'session' (または他のスコープ) が存在するかどうかを確認し、存在する場合は入力します。わかる?これが役立つことを願っています。

于 2012-09-24T17:24:46.373 に答える