jQuery オートコンプリート プラグインを使用して場所のリストを取得していますが、これは正常に機能します。しかし、ユーザーがオートコンプリート テキストボックスを含むページを送信した後にブラウザの戻るボタンをクリックすると、テキスト ボックスは空になります。テキストボックスからオートコンプリートを外して送信してクリックすると、テキストが記憶されます。
ページの読み込み時にオートコンプリートがテキスト ボックスをクリアしないようにする方法はありますか?
jQuery オートコンプリート プラグインを使用して場所のリストを取得していますが、これは正常に機能します。しかし、ユーザーがオートコンプリート テキストボックスを含むページを送信した後にブラウザの戻るボタンをクリックすると、テキスト ボックスは空になります。テキストボックスからオートコンプリートを外して送信してクリックすると、テキストが記憶されます。
ページの読み込み時にオートコンプリートがテキスト ボックスをクリアしないようにする方法はありますか?
今日も同じ問題があり、これを回避する方法を見つけました。
$("#search_form").submit(function() {
$("#location")[0].removeAttribute("autocomplete");
});
このコードは、フォームが送信される直前に autocomplete 属性を削除します。フォームと入力に一致するようにセレクターを変更する必要があります。
さて、私は問題を見つけました。IEではなくFirefoxにあるようで、技術的にはオートコンプリートプラグインが原因ではありません。これは、プラグインが属性autocomplete="off"
をテキストボックスに追加するためです。
これは、ブラウザーのオートコンプリート履歴が jquery のオートコンプリートと競合しないようにするためですが、Firefox では、ユーザーが [戻る] ボタンをクリックしたときに、この属性を持つフィールドは事前入力されません。
これを回避する方法はないと思います。これがデフォルトのブラウザの動作のようです。誰かが違うことを知っているなら、コメントを投稿してください。
プラグインの$.autocompleter
関数には、展開されpreviousValue
たバージョンのjquery.autocomplete.js
. この変数は、初期化時に空の文字列に設定されます。
野心がある場合は、このスクリプトを編集して、テキストボックスに既に値があるかどうかを確認し、ある場合は previousValue を設定してみてください。
投稿されたソリューションはどれも機能しませんでした。高度に AJAX 駆動のアプリケーションが、ページを離れる前に (autocomplete="off" を使用して) 最後の既知の状態でキャッシュされ、ユーザーが [戻る] ボタンを使用すると、ブラウザーが正しくキャッシュされなかったためです。 '以前の値を検索フィールドに挿入しません (属性 autocomplete がオフに設定されているため)。したがって、この場合の唯一の解決策は、JS を実行することでした。そのためには、キャッシュを防止する必要がありました。この単純なスニペットがうまく機能することがわかりました。メインページに挿入するだけで(ユーザーがリンクをクリックすると離れることになります)、キャッシングを十分に防ぐ必要があります. 次に、JS を使用して、オートコンプリート フィールドの値を含め、必要なすべての値を設定します。
window.onbeforeunload = function () {
// Empty function, but it prevents the browser caching this anyway!
}
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');
これは実際には IE の不適切な動作であり、「記憶」機能はサーバー側言語を使用して実行する必要があります。
それらのいくつか (ASP.NET) は、あなたがしないように言わない限り、自動的にそれを行います。
PHP では、GET または POST スーパー変数を使用する必要があります。
サーバー側の言語を使用していない場合は、javascript を使用して GET クエリ文字列にアクセスし、ページ間でいくつかのパラメーターを渡すことができます。そのパラメーターを使用してテキスト ボックスの値を取得し、事前入力することができます。