0

私は、さまざまなものを送信するために使用されるスタイリング用のJavascriptを使用してフォームを開発しています。ただし、ほとんどの場合、異なるものはわずかに異なるだけなので、ブラウザの[戻る]ボタンを押したときに、フォームを送信する前にフォームを残したままにしておくと、ユーザーにとって非常に役立ちます。

:これは、通常のHTML / Javascriptのないフォームを使用する場合にすでに機能します。私が尋ねている質問は、Javascriptを使用して入力フィールドなどを非表示/置換するときにこの機能を保持する方法です。

History.jsとHTML5を試しましreplaceState()たが、何も機能しないようです。また、それが役立つ場合、これは最新のブラウザがインストールされている必要があるプライベートWebサイトになるため、最新のブラウザリリースでのみ利用可能なソリューションを推奨することを躊躇しないでください。

どうもありがとう!

更新#1:これは私が必要としているものをよりよく説明する画像です。

画像

アップデート#2:クロスブラウザを含めて、なんとか完璧にクラックできました。少し眠った後、明日解決策を投稿します。

4

2 に答える 2

1

さて、私は製図板に戻り、すでに存在することを知っているツールを使用して何かを理解しようとしました. 各ブラウザー(通常、主要でないブラウザーはテストしていません)の場合は、フォームを送信した後に [戻る] ボタンを押すと、通常、テキスト入力フィールドが入力されます。これが非表示の入力フィールドでも同じように機能するかどうかを確認したかったのですが、そうであることがわかりました!

次に、ページの読み込みをリッスンする Javascript イベントをいくつか設定します。

if($.browser.mozilla)
{
    $(window).on('pageshow', pageManager.init);
}
else
{
    $(pageManager.init);
}

これは、Chrome、Firefox、および IE9 で機能します。他のブラウザはテストしていませんが、プライベート サイトで使用するブラウザはこれだけなので、私には十分です。ニーズに合わせて独自の優先ソリューションを設定できると確信していますが、これが私にとって最も効果的でした。

とにかく、上記のコードは、ページが読み込まれるたびpageManager.init()に実行されることを意味します。戻るボタンが押されたかどうかを確認するために使用するコードの抜粋を次に示します。これは、単なるページの更新または初回のアクセスではありません。

if($('input[name="form_submitted"]').val() != '')
{
    // back button was pressed
}

ご覧のとおり、非表示のフォーム フィールドに値が含まれているかどうかを確認するのと同じくらい簡単です。実際に値が設定されることを保証するには、フォームの送信時に必ず設定してください。

$('#my-form').submit(function()
{
    $('input[name="form_submitted"]').val('true');
}

それは本当にそれと同じくらい簡単です。これは、ブラウザの [戻る] ボタンが押されたかどうかを判断するために考えられる最良の方法の 1 つです。JSON.stringify()現在、可視フィールドのすべてのフォーム値をキャッシュするには、フィールドで使用し、後でデコードする 1 つの非表示フィールドにすべてを貼り付けるのと同じくらい簡単です。

于 2012-07-28T17:50:01.450 に答える
0

私の知る限り、これは通常手動で処理されます。つまり、ハッシュタグまたは pushState (適切な状態オブジェクトを使用) を使用し、ハッシュ変更または popstate のいずれかでハッシュ/状態を取得し、必要に応じて DOM を (再) 構築します。

(注: 2 つの非常に異なるシナリオを 1 つにまとめました。申し訳ありません。ハッシュの変更のみを使用している場合は、MDN によるとトリガーされないためpushState、を使用しない可能性があります。)pushStateonhashchange

于 2012-07-20T01:50:38.803 に答える