CSS経由でオートコンプリートを無効にする


94

CSSを使用してフォーム要素(特にテキストフィールド)のオートコンプリートを無効にすることはできますか?

オートコンプリート要素を許可しないタグライブラリを使用しています。JavaScriptを使用せずにオートコンプリートを無効にしたいのですが。

回答:


52

生成さidれたname毎回異なる値を使用できるため、ブラウザはこのテキストフィールドを記憶できず、いくつかの値を提案できません。

これは少なくともクロスブラウザーの安全な代替策ですが、RobertsonM(autocomplete="off")の回答を使用することをお勧めします。


4
これの副作用は、ブラウザの履歴が多くの異なる(ランダムな)フォームフィールドで乱雑になることです。ブラウザのローカルデータベースで既知の値を検索するたびに、しばらく時間がかかります。
dermatthias、2011年

4
素晴らしいアイデアですが、クレジットカード番号が暗号化されていないオートコンプリートデータベースに保存されるのを防ぐことはできません。
Hans-PeterStörr2012年

静的なコントロール名/ IDを使用しない場合、スクリプトが機能しなくなり、フォームデータコレクションも機能しなくなります(アプリケーションのすべての側面が新しい命名規則を認識しており、スクリプト/データコレクションも動的に更新している場合を除く) )。
ゲイリーリヒター

オートコンプリートを避ける必要があります。フィールド名を「ランダム化」するのが唯一の現実的な方法です。autocomplete="off"ブラウザXバージョン(現在+ 1)では、このようなヒントの使用は無視されます。(たとえば、最新のGoogle Chromeはautocomplete = offを無視します。)
Mikko Rantalainen 2017年

@kmoser:要素をランダム化してブラウザのオートコンプリート機能idを無効にしても、キャッシュ(つまり、ユーザーのハードドライブ)に保存されます。これは、誰かのクレジットカード番号やその他の機密情報に対して行うのは恐ろしいことです。さらに、ユーザーのディスクドライブが不必要に乱雑になります。ユーザーがページにアクセスするたびに、新しい(Cookieのような)ファイルがコンピューターに保存されます。とりあえず、Chromeのキャッシュをクリアして、空き容量を確認してください(しばらく実行していない場合)。だから私はそれをひどい考えと呼んでいます。
c00000fd 2017

129

現状では、CSSには 'autocomplete off'属性はありません。ただし、htmlにはこのための簡単なコードがあります。

<input type="text" id="foo" value="bar" autocomplete="off" />

サイト全体のエフェクターを探している場合、簡単なのは、すべての「input」を実行してこのタグを追加するjs関数を用意するか、対応するcssクラス/ idを探すことです。

autocomplete属性はChromeとFirefox(!)で正常に動作しますが、HTMLフォームでオートコンプリートを無効にするW3Cの有効な方法はありますか?も参照してください


4
developer.mozilla.org/en-US/docs/Web/Security/…が機能autocomplete="anyrandominvalidvalue"することを示唆しています。
Andrew Stalker

49

jQueryで簡単に実装できます

$('input').attr('autocomplete','off');

4
ほとんどの場合、$( 'form')。attr( 'autocomplete'、 'off'); はるかに効率的です(以下の回答に対するコメントを参照)
irakli '28

@irakli私の場合、機能するのformは使用することだけです。ないinput。ありがとう。
khaverim 14

1
こんにちは、2018年、これは私が最近これを機能させる唯一の方法です。また、@ irakliは、フォーム全体をセレクターとして使用する必要がある場合にも当てはまります。
Devon Kiss

15

を使用しているform場合は、すべてのオートコンプリートを無効にできます。

<form id="Form1" runat="server" autocomplete="off">

確かに、Mozillaごとに: "input要素でautocomplete属性が指定されていない場合、ブラウザは<input>要素のフォーム所有者のautocomplete属性値を使用します。フォーム所有者は、この<input>要素がidがinput要素のform属性で指定されているform要素の子孫またはform要素。詳細については、<form>のautocomplete属性を参照してください。これを上で示したものよりもはるかに効率的なjQueryの代替案と考えると、次のようになります。$( 'form')。attr( 'autocomplete'、 'off');
irakli 2014

13

CSSにはこの機能はありません。クライアント側のスクリプトを使用する必要があります。


1
これをエッジで無効にする方法はありますか?私たちが何をしようとも、それは見えます。
Benjamin Gruenbaum 2016年

@BenjaminGruenbaum Using autocomplete="false"はEdgeで動作します。技術的には、無効な値はここで「false」の代わりに使用できます。
Andrew

4

私はこの質問の回答やウェブの他の記事から提案された方法をすべて試しましたが、とにかく機能しませんでした。以下のようにクライアント側のスクリプトを使用してフォーム要素で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を試しましたが、これが機能し続け、他の人を助けることを願っています。


1

すべての入力に偽のオートコンプリート名を追加することで問題を解決しました。

$("input").attr("autocomplete", "fake-name-disable-autofill");

0

@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がレンダリングするためのものです。

より良い解決策を見つけた場合はお知らせください。


0

CSSを使用してオートコンプリートを無効にすることはできませんが、HTMLを使用することはできます。

<input type="text" autocomplete="false" />

技術的にはfalse、無効な値で置き換えることができ、機能します。このiOSは、Edgeでも機能する唯一の解決策です。


0

これには3つの方法があります。それらをより良い方法である順に説明します...

1-HTMLの方法:

<input type="text" autocomplete="false" />

2-JavaScriptの方法:

document.getElementById("input-id").getAttribute("autocomplete") = "off";

3-jQueryの方法:

$('input').attr('autocomplete','off');

0

'new-password'代わり'off'にオートコンプリートを使用します。

そして、私はこのコードを使用して試してみましたが(少なくとも私の端では)、私はあなたの情報のためにWPとGravityFormを使用しています

$('input').attr('autocomplete','new-password');

-5
$('input').attr('autocomplete','off');

3
これは、質問に対する答えを提供しません。OPは特にCSSソリューションを求めました。また、既存のソリューションとまったく同じです。
Holger
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.