619

いくつかのフォームで、クロムの自動入力の動作に関する問題が発生しています。

フォームのすべてのフィールドには、「email」、「name」、「password」など、非常に一般的で正確な名前が付けられており、autocomplete="off"設定もされています。

オートコンプリート フラグは、入力を開始すると値のドロップダウンが表示されるオートコンプリート動作を正常に無効にしましたが、Chrome がフィールドに自動入力する値は変更していません。

この動作は問題ありませんが、たとえば、電話の入力に電子メール アドレスを入力するなど、chrome が入力を誤って入力している場合を除きます。顧客はこれについて不満を持っているので、複数のケースで発生していることが確認されており、私のマシンでローカルに行ったことに対する何らかの結果としてではありません.

私が考えることができる現在の唯一の解決策は、カスタム入力名を動的に生成し、バックエンドで値を抽出することですが、これはこの問題を回避するかなりハックな方法のようです。これを修正するために使用できる自動入力の動作を変更するタグや癖はありますか?

4

68 に答える 68

1160

2021 年 1 月: autocomplete="off"現在は期待どおりに動作します (Chrome 88 macOS でテスト済み)。

これが機能するためには、フォームタグ内に入力タグがあることを確認してください


2020 年 9 月: autocomplete="chrome-off" Chrome の自動入力を無効にします。


元の回答、2015:

autocomplete="new-password"Chrome の新しいバージョンでは、パスワード フィールドに入力するだけで完了です。私はそれをチェックしました、うまくいきます。

このディスカッションで Chrome 開発者からヒントを得ました: https://bugs.chromium.org/p/chromium/issues/detail?id=370363#c7

PS Chrome は、名前、ID、およびラベルや任意のテキスト ノードを含むフィールドの周囲で取得できるテキスト コンテンツから自動入力の動作を推測しようとすることに注意してください。コンテキスト内のようなオートコンプリート トークンがある場合street-address、Chrome はそのようにオートフィルします。ヒューリスティックは、フォームに追加のフィールドがある場合にのみトリガーされる場合と、フォームにフィールドが少なすぎる場合にトリガーされない場合があるため、非常に混乱する可能性があります。autocomplete="no"また、動作するように見えますがautocomplete="off"、歴史的な理由から動作しないことに注意してください。autocomplete="no"このフィールドは というフィールドとしてオートコンプリートする必要があることをブラウザに伝えていますか"no"。一意のランダムなautocomplete名前を生成すると、オート コンプリートが無効になります。

ユーザーが不正なフォームにアクセスした場合、自動入力情報が破損している可能性があります。手動でアクセスして Chrome の自動入力情報を修正することが、必要な措置になる場合があります。

于 2015-06-22T09:18:01.437 に答える
813

サイトのユーザー名とパスワードを覚えている場合、現在のバージョンの Chrome では、フィールドの前にユーザー名/メール アドレスがフィールドに自動入力されることがわかりましたtype=password。フィールドが何と呼ばれるかは気にしません。パスワードの前のフィールドがユーザー名になると想定するだけです。

古いソリューション

使用するだけ<form autocomplete="off">で、パスワードの事前入力や、ブラウザが行う可能性のある仮定に基づくあらゆる種類のヒューリスティックなフィールド入力を防止できます (これはしばしば間違っています)。whichを使用するのとは対照的に<input autocomplete="off">、パスワードの自動入力ではほとんど無視されているようです (Chrome では、Firefox はそれに従います)。

更新されたソリューション

Chrome は を無視するようになり<form autocomplete="off">ました。したがって、元の回避策 (削除したもの) が大流行しています。

いくつかのフィールドを作成し、「display:none」で非表示にします。例:

<!-- fake fields are a workaround for chrome autofill getting the wrong fields -->
<input style="display: none" type="text" name="fakeusernameremembered" />
<input style="display: none" type="password" name="fakepasswordremembered" />

次に、実際のフィールドを下に置きます。

コメントを追加することを忘れないでください。そうしないと、チームの他の人があなたが何をしているのか不思議に思うでしょう!

2016 年 3 月の更新

最新の Chrome でテストしたところ、すべて問題ありません。これは今ではかなり古い回答ですが、私たちのチームが何十年にもわたって何十ものプロジェクトでそれを使用してきたことに言及したいと思います. 以下のいくつかのコメントにもかかわらず、それでもうまく機能します。フィールドはdisplay:noneフォーカスされないことを意味するため、アクセシビリティに問題はありません。前述したように、実際のフィールドの前にそれらを配置する必要があります。

フォームを変更するために JavaScript を使用している場合は、追加のトリックが必要になります。フォームの操作中に偽のフィールドを表示し、1 ミリ秒後に再び非表示にします。

jQuery を使用したコード例 (偽のフィールドにクラスを指定すると仮定):

$(".fake-autofill-fields").show();
// some DOM manipulation/ajax here
window.setTimeout(function () {
  $(".fake-autofill-fields").hide();
}, 1);

2018 年 7 月の更新

Chrome のアンチ ユーザビリティの専門家が懸命に取り組んでいるため、私のソリューションはもはやうまく機能しません。しかし、彼らは次のような形で私たちに骨を投げかけました:

<input type="password" name="whatever" autocomplete="new-password" />

これは機能し、ほとんどの問題を解決します。

ただし、パスワード フィールドがなく、メール アドレスのみの場合は機能しません。また、黄色くなって事前に充填されるのを止めるのも難しい場合があります。これを修正するには、フェイク フィールド ソリューションを使用できます。

実際、2 ロットの偽のフィールドにドロップして、別の場所で試す必要がある場合があります。たとえば、フォームの先頭にすでに偽のフィールドがありましたが、最近、Chrome が再び「メール」フィールドを事前入力し始めました。 . フィールドの最初または 2 番目のロットのいずれかを削除すると、間違った過剰な自動入力に戻ります。

2020年3月更新

このソリューションがまだ機能するかどうか、いつ機能するかは明らかではありません。時々動作するように見えますが、常にではありません。

以下のコメントで、いくつかのヒントを見つけることができます。@anilyeni によって追加されたばかりのものは、さらに調査する価値があるかもしれません。

私が気付いたように、autocomplete="off"の要素が 3 つ未満の場合、Chrome 80 で動作し<form>ます。ロジックが何であるか、またはそれに関する関連ドキュメントがどこにあるのかわかりません。

テストはしていませんが、@dubrox からのこれも関連している可能性があります。

トリックに感謝しますが、display:none;もう機能しないので、答えを更新してくださいposition: fixed;top:-100px;left:-100px; width:5px;:)

2020年4月更新

この属性のクロムの特別な値は、仕事をしています: (入力時にテストされていますが、私ではありません) autocomplete="chrome-off"

于 2013-04-10T04:54:08.407 に答える
289

何ヶ月にもわたる闘争の後、解決策は想像以上に簡単であることがわかりました。

autocomplete="off"使用する代わりにautocomplete="false";)

それと同じくらい簡単で、Google Chrome でも魅力的に機能します!


2019 年 8 月の更新 (コメントで @JonEdiger に感謝)

注: オンラインの多くの情報によると、ブラウザは autocomplete='false' を autocomplete='off' と同じように扱うようになりました。少なくとも現時点では、これら 3 つのブラウザのオートコンプリートが妨げられています。

フォーム レベルで設定してから、オフにしたい入力に対して、「none」などの無効な値を設定します。

<form autocomplete="off"> 
  <input type="text" id="lastName" autocomplete="none"/> 
  <input type="text" id="firstName" autocomplete="none"/>
</form>
于 2015-04-11T19:57:47.903 に答える
137

autocomplete=off資格情報を間違ったフィールドに入力することを防げない場合もあります。

回避策は、読み取り専用モードを使用してブラウザーの自動入力を無効にし、フォーカス時に書き込み可能に設定することです。

 <input type="password" readonly onfocus="this.removeAttribute('readonly');"/>

このfocusイベントは、マウス クリックおよびフィールドのタブ移動で発生します。

アップデート:

Mobile Safari はフィールドにカーソルを設定しますが、仮想キーボードを表示しません。この新しい回避策は以前と同じように機能しますが、仮想キーボードを処理します。

<input id="email" readonly type="email" onfocus="if (this.hasAttribute('readonly')) {
    this.removeAttribute('readonly');
    // fix for mobile safari to show virtual keyboard
    this.blur();    this.focus();  }" />

ライブデモhttps://jsfiddle.net/danielsuess/n0scguv6/

// UpdateEnd

説明:ブラウザーが資格情報を間違ったテキスト フィールドに自動入力しますか?

電話入力に電子メールアドレスを入力するなど、入力を誤って入力する

同じフォームにパスワード フィールドがある場合、Chrome と Safari でこの奇妙な動作に気付くことがあります。ブラウザは、保存された資格情報を挿入するためのパスワード フィールドを探していると思います。次に、DOMのパスワード フィールドの前に表示される最も近い textlike-input フィールドにユーザーを自動入力します (観察による推測です)。ブラウザは最後のインスタンスであり、制御することはできません。

上記の読み取り専用の修正は私にとってはうまくいきました。

于 2014-11-14T13:32:59.000 に答える
77

理由はわかりませんが、これは役に立ち、うまくいきました。

<input type="password" name="pwd" autocomplete="new-password">

理由はわかりませんが、autocomplete="new-password"は自動入力を無効にします。最新の49.0.2623.112 chrome バージョンで動作しました。

于 2016-04-12T22:05:49.493 に答える
64

これを試して。質問がやや古いことは知っていますが、これは問題に対する別のアプローチです。

passwordまた、問題がフィールドのすぐ上にあることに気付きました。

私は両方の方法を試しました

<form autocomplete="off">しかし、<input autocomplete="off">どれも私のために働いていませんでした。

そこで、以下のスニペットを使用して修正しました。パスワード タイプ フィールドのすぐ上に別のテキスト フィールドを追加して作成しましたdisplay:none

このようなもの:

<input type="text" name="prevent_autofill" id="prevent_autofill" value="" style="display:none;" />
<input type="password" name="password_fake" id="password_fake" value="" style="display:none;" />
<input type="password" name="password" id="password" value="" />

それが誰かを助けることを願っています。

于 2014-05-14T05:13:57.343 に答える
53

私にとっては、シンプルに

<form autocomplete="off" role="presentation">

それをやった。

複数のバージョンでテストされ、最後の試行は 56.0.2924.87 でした

于 2016-09-03T07:00:57.397 に答える
21

それはとてもシンプルでトリッキーです:)

google chrome は基本的に内のすべての最初の表示可能なパスワード要素を検索し、<form>タグの自動再入力を有効にします。これを無効にするには、次のようにダミーのパスワード要素を追加する必要があります。<body><iframe>

    • タグ内のパスワード要素の場合、ダミー要素をフォームの最初の要素としてopen タグ<form>の直後に配置する必要があります<form>

    • タグ内にパスワード要素がない場合、 HTMLページのopenタグ<form>の直後にダミー要素を最初の要素として配置します<body>

  1. cssを使わずにダミー要素を非表示にする必要があるdisplay:noneので、基本的には以下をダミーのパスワード要素として使います。

    <input type="password" style="width: 0;height: 0; visibility: hidden;position:absolute;left:0;top:0;"/>
    
于 2016-03-16T08:24:33.853 に答える
14

Chrome によってキャッシュされた以前に入力された値は、ドロップダウン選択リストとして表示されます。これは autocomplete=off で無効にできます。Chrome の詳細設定で明示的に保存されたアドレスは、アドレス フィールドがフォーカスを取得したときに自動入力ポップアップを提供します。これは、autocomplete="false" で無効にできます。 .しかし、クロムがキャッシュされた値をドロップダウンに表示できるようにします。

次の入力 html フィールドでは、両方がオフになります。

Role="presentation" & autocomplete="off"

住所自動入力用の入力フィールドを選択している間、Chrome は先行する label html 要素を持たない入力フィールドを無視します。

chrome パーサーが自動入力アドレス ポップアップの入力フィールドを確実に無視するようにするために、非表示のボタンまたは画像コントロールをラベルとテキスト ボックスの間に追加できます。これにより、オートフィル用の label -input ペア作成の chrome 解析シーケンスが中断されます。住所フィールドの解析中にチェックボックスが無視される

Chrome は label 要素の "for" 属性も考慮します。クロムの解析シーケンスを中断するために使用できます。

于 2015-07-23T19:20:06.367 に答える
13

これをフォームに追加すると、Chrome がオートフィルを使用できなくなることがわかりました。

<div style="display: none;">
    <input type="text" id="PreventChromeAutocomplete" name="PreventChromeAutocomplete" autocomplete="address-level4" />
</div>

ここで見つかりました。https://code.google.com/p/chromium/issues/detail?id=468153#hc41

いつオートコンプリートするかについて、Chrome が開発者よりもよく知っていると判断したことに本当にがっかりしています。本物のマイクロソフトの感触があります。

于 2015-11-17T20:41:35.323 に答える
8

Mike Nelsons が提供したソリューションは、Chrome 50.0.2661.102 m では機能しませんでした。display:none が設定された同じタイプの入力要素を追加するだけでは、ネイティブ ブラウザのオートコンプリートが無効になりません。オートコンプリートを無効にしたい入力フィールドの name 属性を複製する必要があります。

また、フォーム要素内にあるときに入力フィールドが重複しないようにするには、表示されていない要素に無効を配置する必要があります。これにより、その要素がフォーム アクションの一部として送信されなくなります。

<input name="dpart" disabled="disabled" type="password" style="display:none;">
<input name="dpart" type="password">
<input type="submit">
于 2016-05-31T15:20:34.487 に答える
7

これには2つのピースがあります。Chrome やその他のブラウザーは、以前に入力されたフィールド名の値を記憶し、それに基づいてオートコンプリート リストをユーザーに提供します (特に、パスワード タイプの入力は、かなり明白な理由により、この方法で記憶されることはありません)。autocomplete="off"これを防ぐために、メール フィールドなどに追加できます。

ただし、パスワードフィラーがあります。ほとんどのブラウザには独自の組み込み実装があり、この機能を提供する多くのサードパーティ ユーティリティもあります。これ、やめられない。これは、後で自動的に入力されるようにこの情報を保存することを選択したユーザーであり、アプリケーションの影響範囲と範囲から完全に外れています。

于 2014-07-24T19:56:51.303 に答える
7

私は隠しフィールドを作るのが本当に好きではなかった。

オートコンプリートを停止したい入力フィールドでは、これが機能します。フィールドを読み取り専用にし、フォーカスをオンにして、このようにその属性を削除します

<input readonly onfocus="this.removeAttribute('readonly');" type="text">

これが何をするかというと、最初にフィールドを選択して読み取り専用属性を削除する必要があります。その時点で、おそらく独自のユーザー入力が入力され、自動入力が引き継ぐために前かがみになります。

于 2015-03-18T19:24:20.417 に答える
7

プレースホルダーの保持に問題があり、クロムのオートフィルを無効にしている場合は、この回避策を見つけました。

問題

HTML

<div class="form">
    <input type="text" placeholder="name"><br>
    <input type="text" placeholder="email"><br>
    <input type="text" placeholder="street"><br>
</div>

http://jsfiddle.net/xmbvwfs6/1/

上記の例でも自動入力の問題は発生しますが、required="required"CSS を使用すると、プレースホルダーを複製でき、Chrome はタグを取得しません。

解決

HTML

<div class="form">
    <input type="text" required="required">
    <label>Name</label>  
    <br>
    <input type="text" required="required">
    <label>Email</label>    
    <br>
    <input type="text" required="required">
    <label>Street</label>    
    <br>
</div>

CSS

input {
    margin-bottom: 10px;
    width: 200px;
    height: 20px;
    padding: 0 10px;
    font-size: 14px;
}
input + label {
    position: relative;
    left: -216px;
    color: #999;
    font-size: 14px;
}
input:invalid + label { 
    display: inline-block; 
}
input:valid + label { 
    display: none; 
}

http://jsfiddle.net/mwshpx1o/1/

于 2015-03-18T18:28:21.730 に答える
6

ここで動作するように設定autocompleteすることで、検索ページでGoogleが使用する例があります。offこれは要素の検査から見つけました。

ここに画像の説明を入力

編集:うまくいかない場合は、またはoffを試してください。私の場合、クロムバージョン48.0で動作していますfalsenofill

于 2015-12-17T06:24:52.440 に答える
6

別のソリューション、Webkit ベース。既に述べたように、Chrome はパスワード フィールドを見つけるたびにメールをオートコンプリートします。私の知る限り、これは autocomplete = [whatever] に関係ありません。

これを回避するには、入力タイプをテキストに変更し、任意の形式で Webkit セキュリティ フォントを適用します。

.secure-font{
-webkit-text-security:disc;}

<input type ="text" class="secure-font">

私が見る限り、これは少なくとも入力タイプ=パスワードと同じくらい安全であり、コピーと貼り付けは安全です. ただし、アスタリスクを削除するスタイルを削除すると脆弱になります。もちろん、コンソールで input type = password を input type = text に簡単に変更して、自動入力されたパスワードを表示できるため、実際にはほとんど同じです。

于 2016-02-12T16:11:37.277 に答える
6

Chromium バグ レポート #352347によると、 Chrome はautocomplete="off|false|anythingelse"フォームでも入力でも を尊重しなくなりました。

私にとってうまくいった唯一の解決策は、ダミーのパスワードフィールドを追加することでした:

<input type="password" class="hidden" />
<input type="password" />
于 2016-01-15T11:01:53.157 に答える
6

jQuery私のために働いた次のコードを試してください。

if ($.browser.webkit) {
    $('input[name="password"]').attr('autocomplete', 'off');
    $('input[name="email"]').attr('autocomplete', 'off');
}
于 2014-03-20T09:20:58.753 に答える
4

パスワード フィールドに追加する最新のソリューションは、autocomplete="new-password"Chrome による自動入力を防止するのに最適です。

ただし、sibbl が指摘したように、これは、フォームの送信が完了した後に Chrome がパスワードを保存するように求めることを妨げません。Chrome 51.0.2704.106 の時点で、属性を持つ非表示のダミー パスワード フィールドを追加することでこれを実現できることがわかりましたautocomplete="new-password"。この場合、「display:none」は機能しないことに注意してください。たとえば、実際のパスワード フィールドの前に次のようなものを追加します。

<input type="password" autocomplete="new-password" 
style="visibility:hidden;height:0;width:1px;position:absolute;left:0;top:0">`

これは、幅をゼロ以外の値に設定した場合にのみ機能しました。元の回答を提供してくれた tibalt と fareed namrouti に感謝します。

于 2016-07-16T00:42:50.233 に答える
4

私は同じ問題に直面しました。そして、これがChromeでの自動入力ユーザー名とパスワードを無効にするためのソリューションです(Chromeのみでテスト済み)

    <!-- Just add this hidden field before password as a charmed solution to prevent auto-fill of browser on remembered password -->
    <input type="tel" hidden />
    <input type="password" ng-minlength="8" ng-maxlength="30" ng-model="user.password" name="password" class="form-control" required placeholder="Input password">
于 2015-09-15T08:18:50.303 に答える
3

私にとってうまくいく唯一の方法は:(jQueryが必要です)

$(document).ready(function(e) {
    if ($.browser.webkit) {
        $('#input_id').val(' ').val('');
    }
});
于 2014-05-14T18:51:57.547 に答える
3

値に空白を入れてみてください:

<input type="email" name="email" value="&nbsp;">
<input type="password" name="password" value="&nbsp;">

クローム 54.0.2840.59

于 2016-10-13T23:05:04.410 に答える
2

「これが私にとってうまくいった」という回答や、完全なハックのように見えるその他の回答の代わりに...これは現在、クロム(および最新の仕様)が要素のautocomplete属性を処理する方法です。input

https://developers.google.com/web/fundamentals/design-and-ui/input/forms/label-and-name-inputs?hl=en

TLDR:autocomplete='<value>'入力を追加します<value>。フィールドの目的を定義する任意の文字列が必要です。これは属性と同様に機能しnameます。可能な場合は、上記のリンクの推奨値を使用してください。

また、フォームから autocomplete 属性を削除します

于 2016-02-08T02:36:23.920 に答える
2

最後に、まともな解決策を見つけたと思います。Chrome でドロップダウンがどのように機能するかを理解するのに役立ちました :) 基本的に、ドロップダウンは、入力にフォーカスしたとき、および Chrome がメモリに持っているものと一致するエントリを入力しているときにマウス ダウン イベントを生成したときに表示されます。それを念頭に置いて、「名前」、「電子メール」などのデフォルト名がある場合、Chrome は特定の入力に対してそれを行うので、ドロップダウンが表示されるときに名前を削除し、後で再度追加する必要があります。 :) オートコンプリート属性をオフにするだけで機能するソリューションを使用したかったのです。理にかなっていると思いました。これはコードです:

解決策 1

jQuery('body').on('mousedown','[name="name"][autocomplete="off"], [name="email"][autocomplete="off"]',function(e){
    e.stopImmediatePropagation();
    if(typeof this.currentName =="undefined")
        this.currentName=jQuery(this).attr('name');
    jQuery(this).attr('name','');
});

jQuery('body').on('blur','[autocomplete="off"]',function(e){
    e.stopImmediatePropagation();
    jQuery(this).attr('name',this.currentName);
});

解決策 2 (私のお気に入り)

上記の解決策は、フォーカス (ぼかし) を削除するまで入力の名前を削除し、その瞬間に元の名前に戻します。しかし、入力中に名前属性を介して入力にアクセスすることに関心がある場合があります。つまり、各入力の直後に名前を戻す必要があります。このソリューションは、基本的に最初のソリューションに基づいています。この場合、キーダウンで名前を追加し、キーアップで元に戻します。これは、「オートコンプリートをオフにする」動作との互換性のために、よりきちんとしていると思います。とにかく、これはコードです:

jQuery('body').on('mousedown keydown','[name="name"][autocomplete="off"], [name="email"][autocomplete="off"]',function(e){
    e.stopImmediatePropagation();
    if(typeof this.currentName =="undefined")
        this.currentName=jQuery(this).attr('name');
    jQuery(this).attr('name','');
});
jQuery('body').on('blur keyup','[autocomplete="off"]',function(e){
    e.stopImmediatePropagation();
    if(typeof this.currentName !="undefined")
        jQuery(this).attr('name',this.currentName);
});

解決策 1 と 2 では、入力名が「name」と「email」の場合を取り上げただけであることに注意してください。この属性が Chrome にドロップダウンを生成させるその他のケースでは、マウス ダウン イベントのセレクターに追加する必要があります。

解決策 3

このソリューションはもっと面倒です。私たちが修正しようとしている動作が、「名前、電子メールなど」のような特定の名前の入力に基づいているだけであることに気付きませんでした。このソリューションのアプローチは、アプリオリにわからない他の名前を Chrome が表示する場合のためのものでした。それは非常に一般的な解決策になります。基本的に、削除キーを押したときに小さなちらつきが発生する可能性があるため、他の2つほど好きではありません. 以下にその説明をします。

入力を2回クリックするとドロップダウンが表示されますが、入力に初めて焦点を合わせたときの最初のクリックでは表示されないことがわかりました。このすべての要素に対して「マウスダウン」イベントをバインドします。ここで、ハンドラーは基本的に、入力に既にフォーカスされているかどうかを検出し、別の「マウスダウン」を検出した場合は、.blur() を強制し、その後 .focus() を強制して防止します。フォーカスされると、2 回目のクリックでドロップダウンが表示されます。ここに私が使用したコードがある場合に備えて、それが明確であることを願っています:

jQuery('body').on('mousedown','[autocomplete="off"]',function(e){
    e.stopImmediatePropagation();
    if(jQuery(this).is(':focus')) {
        jQuery(this).blur();
        jQuery(this).focus();
    }
});

一方、Chrome の候補と一致する場合に備えて、入力中にドロップダウンが表示されないようにするためには、少し注意が必要です。ユーザーが入力している間、入力のデフォルトの動作を置き換えることにしました。ドロップダウンはマウス ダウン時の入力を評価するので、英数字、スペースなどのデフォルトの動作を防止します。唯一の問題は、Command、Ctrl、および削除です。この場合、マウスアップ時のイベントもバインドする必要がありました。最初の 2 つのケースではデフォルトの動作が許可されるため、コピー、貼り付け、またはすべてを選択できます。削除の場合、デフォルトの動作を許可する必要がありますが、文字を削除した後に入力が Chrome の提案と一致すると、再びドロップダウンが表示されました。この場合、ぼかしとフォーカスの同じトリックを使用する必要がありました。これに関して私が見つけた唯一の不都合は、キーアップ時の動作をキャンセルしていて、Chrome がキーダウン時にそれを表示しようとするため、小さなちらつきがあることです。とにかく、これが私にできる最善のことです。おそらく、ある時点で文字のフィルタリングが必要になるでしょう。今のところ、条件がより理にかなっていると付け加えただけです。これはコードの 2 番目の部分です。

jQuery('body').on('keydown','[autocomplete="off"]',function(e){
    e.stopImmediatePropagation();
    var ctrlKey = 17,cmKey = 91;
    var charCode = e.which || e.keyCode;

    if(charCode!=16 && this.commandDown != true && this.ctrlDown != true && ((charCode>47 && charCode<58)||(charCode>64 && charCode<91)||(charCode>96 && charCode<123)||charCode==0 || charCode==32)){ 
        e.preventDefault();
        var charStr = String.fromCharCode(charCode);
        if(!e.shiftKey)
            charStr = charStr.toLowerCase(charStr);
        $(this).val($(this).val() + charStr);
    }else{
        if (charCode == cmKey) this.commandDown = true;
        if (charCode == ctrlKey) this.ctrlDown = true;
    }
});
jQuery('body').on('keyup','[autocomplete="off"]',function(e){
    e.stopImmediatePropagation();
    var allowed=[8];//Delete
    var ctrlKey = 17,cmKey = 91;
    var charCode = e.which || e.keyCode;

    if (charCode == cmKey) {this.commandDown = false};
    if (charCode == ctrlKey) {this.ctrlDown = false};
    if(allowed.indexOf(charCode)>=0 || (this.commandDown!=false && this.ctrlDown!=false)){
        jQuery(this).blur();
        jQuery(this).focus();
}

私が言ったように、この解決策はもっと面倒です。特定の入力名に対してドロップダウンが表示されることに気付くまで、これは私が最初に使用したものでした。

たくさん書いてすみません、すべてが明確であることを確認したかっただけです。お役に立てば幸いです。

于 2015-03-30T03:05:24.727 に答える
1

Chromium 53.0.2785.92 (64 ビット) では、以下が機能しました

<div style="visibility:hidden">
    <input type="text" name="fake_username_remembered">
    <input type="password" name="fake_password_remembered">
</div>

display:none動作しません

于 2016-09-06T09:20:33.380 に答える
1

クロムは実際には多くのフィールドを埋めるため、正しく機能させるには追加のフィールドが必要でした。また、実際に機能させるには、display:none よりも凝った方法でフィールドを非表示にする必要がありました。

<style>.stylish { position:absolute; top:-2000px; }</style>
<input id="_____fake_email_remembered" class="stylish" tabindex="-1"  type="email" name="email_autofill"/> 
<input id="_____fake_userName_remembered" class="stylish" tabindex="-1"  type="text" name="userName_autofill"/>
<input id="_____fake_firstName_remembered" class="stylish" tabindex="-1"   type="text" name="firstName_autofill"/>
<input id="_____fake_lastName_remembered" class="stylish" tabindex="-1"   type="text" name="lastName_autofill"/>
<input id="_____fake_phone_remembered" class="stylish"  tabindex="-1"  type="text" name="phone_autofill"/>
<input id="_____fake_address_remembered" class="stylish"  tabindex="-1"   type="text" name="address_autofill"/>
<input id="_____fake_password_remembered" class="stylish"  tabindex="-1"   type="password" name="password_autofill"/>
<input id="_____fake_password_remembered2" class="stylish"  tabindex="-1"   type="password" name="passwordRepeated_autofill"/>
于 2015-12-07T11:30:40.877 に答える
1

このトリックにより、オートコンプリート機能が正常に無効化されました。 できます!

[HTML]

<div id="login_screen" style="min-height: 45px;">
   <input id="password_1" type="text" name="password">
</div>

【Jクエリ】

$("#login_screen").on('keyup keydown mousedown', '#password_1', function (e) {
    let elem = $(this);

    if (elem.val().length > 0 && elem.attr("type") === "text") {
        elem.attr("type", "password");
    } else {
        setTimeout(function () {
            if (elem.val().length === 0) {
                elem.attr("type", "text");
                elem.hide();
                setTimeout(function () {
                    elem.show().focus();
                }, 1);
            }
        }, 1);
    }

    if (elem.val() === "" && e.type === "mousedown") {
        elem.hide();
        setTimeout(function () {
            elem.show().focus();
        }, 1);
    }

});
于 2018-05-08T16:23:04.583 に答える
1

Angular ユーザーの場合:

新しい chrome バージョンでは無視されるためautocomplete = 'off'、chrome 開発者は autocomplete= 'false | ランダム文字列」なので、google chrome/modern ブラウザには 2 種類のユーザー ヘルパーがあります -

  1. autocomplete='off'(これにより、最後にキャッシュされた提案が防止されます)。
  2. autocomplete = 'false | random-string'(「ランダム文字列」はブラウザに認識されないため、自動入力設定を防ぎます)。

迷惑な提案の両方を無効にする場合はどうすればよいですか?ここにトリックがあります: -

  1. autocomplete = 'off'すべての入力フィールドに追加します。(または単純な Jquery)。

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

  1. タグを HTML コードから削除し、コンテナー<form name='form-name'>に追加ng-form = 'form-name'します。<div>追加ng-form="form-name"すると、すべての検証も保持されます。
于 2018-04-23T15:17:20.620 に答える
1

Dvd Franco が言ったように、私にとってはすべてのフィールドに automplete='off' を入れるだけでうまくいきました。そこで、この jquery ルールを $(document).ready(); に入れました。メインの .js ファイルの関数

$('form.no_autofill').attr('autocomplete','off');
$('.no_autofill input').attr('autocomplete','off');
于 2015-08-03T16:50:12.140 に答える
0

ユーザー名フィールドに「 」(空白スペース) の値を入力します。

<input type = 'text' value = ' ' name = 'username' />

ユーザーが入力した値を使用してユーザー名を設定する場合、ユーザーが入力した値がない場合は、' ' を入力するようにコーディングします。

編集:「username」フィールドを「username」以外の名前に変更する必要もありました。たとえば、「nameofuser」です。

于 2015-09-10T14:08:45.047 に答える
0

「display:none;」を付けて非表示にする方法 フォームがJavaScriptを介して生成されている場合、入力への入力はうまくいきませんでした。

その代わりに、それらを見えないように配置して非表示にしました。

<input style="width:0;height:0;opacity:0;position:absolute;left:-10000px;overflow:hidden;" type="text" name="fakeusernameremembered"/>
<input style="width:0;height:0;opacity:0;position:absolute;left:-10000px;overflow:hidden;" type="password" name="fakepasswordremembered"/>
于 2016-05-06T12:55:26.907 に答える
0

display none が機能しないように見えるので、追加します

<input type="text" name="fakeusernameremembered"/>
<input type="password" name="fakepasswordremembered"/>

オーバーフローが非表示の div 内、最大幅と最大高さ 0px

したがって、次のようになります。

<div style="overflow: hidden; max-width: 0px; max-height: 0px;">
    <input type="text" name="fakeusernameremembered"/>
    <input type="password" name="fakepasswordremembered"/>
</div>
于 2016-12-05T15:18:35.650 に答える
0

私のハック — Chrome 48 でテスト済み:

idChrome は のようなものやname属性だけ<input>でなく、関連するコンテンツも調べることでフィールドのタイプを見つけようとするため<label>、これらの意味のない名前を見つける必要があります。

idとについては、ここにnameリストされていないものを簡単に選択できます。

の場合、たとえば都市の場合、中間に目にlabel見えないものを挿入しました(それは私の場所のオートコンプリートをいじっています)<span>

<span>Ci<span style="display:none">*</span>ty</span>

完全な作業例:

<!DOCTYPE html>
<html>
  <body>
    <form method="post" action="/register">
      <div>
        <label for="name">Name</label>
        <input id="name" type="text" name="name" />
      </div>
      <div>
        <label for="email">Email</label>
        <input id="email" type="text" name="email" />
      </div>
      <div>
        <label for="id1">City</label>
        <input id="id1" type="text" name="id1" /> <-- STILL ON :(
      </div>
      <div>
        <label for="id2">Ci<span style="display:none">*</span>ty</label>
        <input id="id2" type="text" name="id2" /> <-- NOW OFF :)
      </div>
    </form>
  </body>
</html>

于 2016-02-10T00:22:18.480 に答える
0

残念ながら、どのソリューションも機能していないようです。を使用してメール(ユーザー名)を空白にすることができました

                    <!-- fake fields are a workaround for chrome autofill getting the wrong fields -->
                    <input style="display:none" type="text" name="fakeusernameremembered"/>
                    <input style="display:none" type="password" name="fakepasswordremembered"/>

手法ですが、パスワードは引き続き入力されます。

于 2016-02-12T20:28:19.440 に答える
0

私の問題は、データベースから可能な値を自動提案していたため、Chrome が Bootstrap オートコンプリート インターフェイスを介して郵便番号を自動入力することでした。

私がしなければならなかったこと:

  • 入力フィールドのidプロパティを「郵便番号」以外に変更してください
  • 入力フィールドのautocomplete値をfalse
  • 呼び出した後、Boostrap のオートコンプリート プラグインが自動的に変更するため$('#postcode_field').autocomplete(...)、オートコンプリート プロパティをリセットする必要がありました。$('#postcode_field').prop('autocomplete', 'false');off
于 2017-12-20T14:10:31.590 に答える
0

input type="text" を複数行の入力に変更するために私が行ったこと。

 overflow-x:hidden;
 overflow-y:hidden;
 vertical-align:middle;
 resize: none;

コードの簡単な説明: overflow-x および -y hidden wil は、テキストエリア ボックスの右側にあるスクロール ボタンを無効にします。vertial algin は、ラベルの垂直方向の中央をテキスト領域と resize: none に揃え、テキスト領域の右下にあるサイズ変更グラバーを無効にします。

本質的には、テキストエリアがテキストボックスのように表示されますが、クロムの自動入力がオフになっていることを意味します。

于 2018-03-21T09:24:41.967 に答える
0

Jobin Jose の回答がきっかけでした。これが私にとってうまくいくものです:

<input type="password" name="password" id="password_fake" style="display:none;" />
<input type="password" name="password"/>

ソリューションを台無しにする autocomplete="off" を持たないようにしてください。

于 2017-09-25T09:55:29.610 に答える
-1

修正を投稿すると思いました。display:none を使用できないことがわかったので、偽の入力を小さくして見えないようにするための迅速で汚い解決策を思いつきました。彼らが再びそれを壊すまで、これまでのところとても良い.

                    <input id="FakePassword" type="password" style="float:left;position:relative;height:0;width:0;top:-1000px;left:-1000px;" />

于 2016-04-07T17:53:31.313 に答える
-1

クロムでは、入力をラベルで囲み、ラベル内に通り、住所、またはその両方の単語を入れると、自動入力を無効にする試みが無視されます。

<label for="searchAddress" class="control-label"> Street Address <input type="text" class="form-control" name="searchAddress></label>

Chrome は、ラベル内のキーワードを検出して、入力タイプを把握します。これは、他のキーワードでも同様に行われる可能性があります。

于 2016-02-25T03:34:21.773 に答える
-2

私の解決策:

$(function(){
    $("form[autocomplete=off]").find('input').attr('autocomplete', 'false');
});

'autocomplete="off"' を持つフォームのすべての入力フィールドに属性 'autocomplete="false"' を設定します。

これは chrome、firefox、safari で動作します。

于 2015-09-27T20:14:53.573 に答える