CSSを使用してフォーム要素(特にテキストフィールド)のオートコンプリートを無効にすることはできますか?
オートコンプリート要素を許可しないタグライブラリを使用しています。JavaScriptを使用せずにオートコンプリートを無効にしたいのですが。
回答:
生成さid
れたname
毎回異なる値を使用できるため、ブラウザはこのテキストフィールドを記憶できず、いくつかの値を提案できません。
これは少なくともクロスブラウザーの安全な代替策ですが、RobertsonM(autocomplete="off"
)の回答を使用することをお勧めします。
autocomplete="off"
ブラウザXバージョン(現在+ 1)では、このようなヒントの使用は無視されます。(たとえば、最新のGoogle Chromeはautocomplete = offを無視します。)
id
を無効にしても、キャッシュ(つまり、ユーザーのハードドライブ)に保存されます。これは、誰かのクレジットカード番号やその他の機密情報に対して行うのは恐ろしいことです。さらに、ユーザーのディスクドライブが不必要に乱雑になります。ユーザーがページにアクセスするたびに、新しい(Cookieのような)ファイルがコンピューターに保存されます。とりあえず、Chromeのキャッシュをクリアして、空き容量を確認してください(しばらく実行していない場合)。だから私はそれをひどい考えと呼んでいます。
現状では、CSSには 'autocomplete off'属性はありません。ただし、htmlにはこのための簡単なコードがあります。
<input type="text" id="foo" value="bar" autocomplete="off" />
サイト全体のエフェクターを探している場合、簡単なのは、すべての「input」を実行してこのタグを追加するjs関数を用意するか、対応するcssクラス/ idを探すことです。
autocomplete属性はChromeとFirefox(!)で正常に動作しますが、HTMLフォームでオートコンプリートを無効にするW3Cの有効な方法はありますか?も参照してください。
autocomplete="anyrandominvalidvalue"
することを示唆しています。
jQueryで簡単に実装できます
$('input').attr('autocomplete','off');
form
は使用することだけです。ないinput
。ありがとう。
を使用しているform
場合は、すべてのオートコンプリートを無効にできます。
<form id="Form1" runat="server" autocomplete="off">
CSSにはこの機能はありません。クライアント側のスクリプトを使用する必要があります。
autocomplete="false"
はEdgeで動作します。技術的には、無効な値はここで「false」の代わりに使用できます。
私はこの質問の回答やウェブの他の記事から提案された方法をすべて試しましたが、とにかく機能しませんでした。以下のようにクライアント側のスクリプトを使用してフォーム要素でautocomplete = "new-random-value"、autocomplete = "off"を試してみましたが、ユーザーの1人が言及したように$(document).ready()の外側にあります。
$(':input').on('focus', function () {
$(this).attr('autocomplete', 'off')
});
ブラウザーの別の優先順位がこの奇妙な動作を引き起こしていることに気づきました!それで私はより多くを検索し、最後に、この良い記事の行の下をもう一度注意深く読みました:
このため、最近のブラウザの多くは、ログインフィールドのautocomplete = "off"をサポートしていません。
サイトがにautocomplete = "off"を設定し、フォームにユーザー名とパスワードの入力フィールドが含まれている場合でも、ブラウザはこのログインを記憶することを提案し、ユーザーが同意すると、ブラウザは次回ユーザーがそれらのフィールドに自動入力するようにしますページにアクセスします。サイトがユーザー名とパスワードのフィールドにautocomplete = "off"を設定している場合でも、ブラウザはこのログインを記憶することを提案し、ユーザーが同意すると、ユーザーが次にページにアクセスしたときにブラウザはそれらのフィールドを自動入力します。これは、Firefox(バージョン38以降)、Google Chrome(34以降)、およびInternet Explorer(バージョン11以降)での動作です。
ユーザーが別のユーザーの新しいパスワードを指定できるユーザー管理ページを定義しているため、パスワードフィールドの自動入力を禁止する場合は、autocomplete = "new-password"を使用できます 。ただし、この値のサポートはFirefoxでは実装されていません。
うまくいきました。私は特別にChromeを試しましたが、これが機能し続け、他の人を助けることを願っています。
@ahhmarrの解決策のおかげで、Angular + ui-routerで同じ問題を解決することができました環境で。興味のある人のためにここで共有します。
私index.html
には次のスクリプトを追加しました:
<script type="text/javascript">
setTimeout(function() {
$('input').attr('autocomplete', 'off');
}, 2000);
</script>
次に、状態の変化に対応するために、ルートコントローラーに次のコードを追加しました。
$rootScope.$on('$stateChangeStart', function() {
$timeout(function () {
$('input').attr('autocomplete', 'off');
}, 2000);
});
タイムアウトは、jqueryを適用する前にHTMLがレンダリングするためのものです。
より良い解決策を見つけた場合はお知らせください。