9

jQuery オートコンプリート プラグインを使用して場所のリストを取得していますが、これは正常に機能します。しかし、ユーザーがオートコンプリート テキストボックスを含むページを送信した後にブラウザの戻るボタンをクリックすると、テキスト ボックスは空になります。テキストボックスからオートコンプリートを外して送信してクリックすると、テキストが記憶されます。

ページの読み込み時にオートコンプリートがテキスト ボックスをクリアしないようにする方法はありますか?

4

6 に答える 6

12

今日も同じ問題があり、これを回避する方法を見つけました。

$("#search_form").submit(function() {
    $("#location")[0].removeAttribute("autocomplete");
});

このコードは、フォームが送信される直前に autocomplete 属性を削除します。フォームと入力に一致するようにセレクターを変更する必要があります。

于 2009-09-30T19:11:56.163 に答える
9

さて、私は問題を見つけました。IEではなくFirefoxにあるようで、技術的にはオートコンプリートプラグインが原因ではありません。これは、プラグインが属性autocomplete="off"をテキストボックスに追加するためです。

これは、ブラウザーのオートコンプリート履歴が jquery のオートコンプリートと競合しないようにするためですが、Firefox では、ユーザーが [戻る] ボタンをクリックしたときに、この属性を持つフィールドは事前入力されません。

これを回避する方法はないと思います。これがデフォルトのブラウザの動作のようです。誰かが違うことを知っているなら、コメントを投稿してください。

于 2009-01-14T01:36:41.357 に答える
2

プラグインの$.autocompleter関数には、展開されpreviousValueたバージョンのjquery.autocomplete.js. この変数は、初期化時に空の文字列に設定されます。

野心がある場合は、このスクリプトを編集して、テキストボックスに既に値があるかどうかを確認し、ある場合は previousValue を設定してみてください。

于 2009-01-14T01:06:26.347 に答える
0

投稿されたソリューションはどれも機能しませんでした。高度に AJAX 駆動のアプリケーションが、ページを離れる前に (autocomplete="off" を使用して) 最後の既知の状態でキャッシュされ、ユーザーが [戻る] ボタンを使用すると、ブラウザーが正しくキャッシュされなかったためです。 '以前の値を検索フィールドに挿入しません (属性 autocomplete がオフに設定されているため)。したがって、この場合の唯一の解決策は、JS を実行することでした。そのためには、キャッシュを防止する必要がありました。この単純なスニペットがうまく機能することがわかりました。メインページに挿入するだけで(ユーザーがリンクをクリックすると離れることになります)、キャッシングを十分に防ぐ必要があります. 次に、JS を使用して、オートコンプリート フィールドの値を含め、必要なすべての値を設定します。

  window.onbeforeunload = function () {
    // Empty function, but it prevents the browser caching this anyway!
  }
于 2010-02-12T10:07:49.893 に答える
0

heyman & Glenn のコードは機能しますが、送信後にフォームがまだ表示されている場合、たとえば AJAX を使用してページの別の部分を更新するため、送信時に無効にするだけでは不十分な場合があります。また、別のリンクを使用して (フォームを送信せずに) ページを離れる場合、オートコンプリート属性がそのまま残り、[戻る] ボタンを使用すると入力した値が削除されます。

私はそれを修正するために次のコードを使用します。入力要素がアクティブな場合 (フォーカスがある場合) にのみ autocomplete 属性を追加します。設定が異なる複数のオートコンプリート フィールドがあるため、属性の削除と追加を名前付き関数に入れました。オートコンプリート フィールドが 1 つしかない場合は、関数本体をイベント ステートメントに入れることができます。

var autoCompleteFixSet = function() {
    $(this).attr('autocomplete', 'off');
};
var autoCompleteFixUnset = function() {
    $(this).removeAttr('autocomplete');
};

$('#elem').autocomplete({
    minLength : 1,
    source: '/values.php'
}).focus(autoCompleteFixSet).blur(autoCompleteFixUnset).removeAttr('autocomplete');
于 2011-09-11T14:57:21.727 に答える
-3

これは実際には IE の不適切な動作であり、「記憶」機能はサーバー側言語を使用して実行する必要があります。

それらのいくつか (ASP.NET) は、あなたがしないように言わない限り、自動的にそれを行います。

PHP では、GET または POST スーパー変数を使用する必要があります。

サーバー側の言語を使用していない場合は、javascript を使用して GET クエリ文字列にアクセスし、ページ間でいくつかのパラメーターを渡すことができます。そのパラメーターを使用してテキスト ボックスの値を取得し、事前入力することができます。

于 2009-03-11T17:50:33.273 に答える