Reactはオートコンプリートをオフにしません


83

どのように反応させてレンダリングさせるのですか?

<input
    id={field.name}
    className="form-control"
    type="text"
    placeholder={field.name}
    autocomplete="off"
    {...field}/>

回答:


159

大文字の「C」autoComplete。これはReactのドキュメントに記載されています:

https://facebook.github.io/react/docs/tags-and-attributes.html


16
エラーを黙って無視するだけでなく、常に例外をスローします。
ヤロスラフ

1
@Yaroslav Reactがこれに対して警告をスローする可能性があります。そうでない場合は、github.com
yannickcr /

1
しかしまた、小道具は何でもかまいませんので、エラーではありません。独自の小道具を作成しているときやhtml属性を使用しているとき、Reactはどのように認識しますか?
azium 2016年

小道具は、htmlタグには何もできません。
ヤロスラフ

なぜそうなると思うのかは理解できますが、これらのJSXタグは、タグの種類を表す文字列を使用して関数呼び出しにトランスパイルされることを覚えておいてください。
azium 2016年

67

あなたは置くべきです:

autoComplete="new-password"

これにより、オートコンプリートが削除されます


13
「オフ」の代わりにこれが機能する理由がわかりません。奇妙な。
アジャイ


@Pimは理にかなっています。ありがとう!
アジャイ

1
あなたは伝説です、ありがとう!また、新しいパスワードフィールドがオートコンプリートされないようにしたかったのも理にかなっています:D
ErikKubica19年

おそらくクロムはnew名前の中を認識しています。私は今それを名付けautoComplete="new-off"、それはパスワードフィールドではない場合は私にはもう少し理にかなっている、それが正常に動作します:D
ケニー

7

Mozillaのドキュメントによると、オートコンプリートを実際にオフにするには、無効な値を設定する必要があります。一部のブラウザでは、属性がオフに設定されていても、オートコンプリートの提案が表示されます。

これは私のために働いた(react-bootstrap):

<FormControl
  value={this.state.value}
  autoComplete="nope"
  {...props}
/>

うわー、それは奇妙ですが、これまで私のために働いたのはそれだけです。
WylliamJudd19年

1
@Pimうーん、それは同じであるautocompleteautofill?Chromeを使用している私には機能しないためです。同じフォームで送信された以前の値をフォームに自動入力し続けます。
alexventuraio

6

正解を読んでもこの問題が発生する場合(特にChromeの場合)、クラブへようこそ...だから私がどのようにそれを達成したかを確認してください:

<form autoComplete="new-password" ... >
        <input name="myInput" type="text" autoComplete="off" id="myInput" placeholder="Search field" />
</form>

ノート

  • フォームは必ずしも入力要素の直接の親である必要はありません
  • 入力には名前属性が必要です
  • また、React-Bootstrap<FormControl/>タグ(の代わりに<input/>)でも機能します

動作しません。Chrome67を試しています。何もありません。私はまだディスプレイ付きの偽の入力が必要です:なし!とても狂っている!

フィードバックに感謝しますが、あなたのケースは3つの箇条書きすべてにチェックマークを付けていますか?
w3jimmy

いくつかのケースでは、私はまだこれで自動提案を得ていました。より完全な解決策については、私の答えを参照してください。
ピム

5

これらのソリューションはいずれもChrome80では実際には機能しませんでした。

何時間もの試行錯誤の末、この非常に奇妙なハックがうまくいきました。

  1. autoComplete="none"それぞれに追加<input>-Googleはautocomplete = "off"をスキップします
  2. フィールドをコンテナでラップします:<form>または<div>
  3. が付いた有効な入力フィールドが少なくとも1つ必要ですautoComplete="on"。これは、コンテナの最後の要素である必要があります。そこで、フォームの下部に次の入力フィールドを追加しました。
<input 
  type="text" 
  autoComplete="on" 
  value="" 
  style={{display: 'none', opacity: 0, position: 'absolute', left: '-100000px'}} 
  readOnly={true}
/>

3

autoComplete = "none"-私のために働きます。


2
ようこそアレックス。あなたの答えをもっと冗長にするようにしてください。「オートコンプリート」のケーシングのためにソリューションが機能することを強調することが重要です。
JenniferGoncalves19年


0

@aziumの回答に加えて<input><form>タグ内に配置する必要があり、その後autoComplete機能します


0

私はたった1行でそれを解決しました:

「changeHandler()」とコンポーネントの状態で推奨される方法を使用する場合は、次を挿入するだけです。

changeHandler = (e) => {    
  if (!e.isTrusted) return;
  ... your code
}

そのchangeHandler()に関する詳細情報-事:https://reactjs.org/docs/forms.html#managed-components


2
クロムは私の入力を自動入力するときグーグル、e.isTrustedは真である:D
IvanY

0

私も多くのオプションを試しましたが、結局、<form>タグを<div>タグに置き換えて、そのフォームでの各入力を手動で管理することになりました。


0

これが「私のマシンで動作する」です

Chromeバージョン83.0.4103.116およびReact。私にとってうまくいったトリックは、フォーム内に配置してオートコンプリート属性を追加することのようです。注意これを非反応アプリで試す場合は、小文字のCでオートコンプリートを実行する必要があります

 <form autoComplete="off">
      <input type="text" autoComplete="new-password" />
 </form>

そして

<form autoComplete="new-password">
  <input type="text" autoComplete="new-password" />
</form>

0

ここや他の場所での提案のほとんどは2020年12月に失敗しました。フォームラッパーで、オートコンプリートを「newpassword」の「オフ」に設定し(どちらも機能しません)、onFocusを使用して、オートコンプリートではなくオートコンプリートを使用するようにしました。 (大文字ではありません)が、どれも役に立ちませんでした。

結局、mscott2005のアプローチは私にとってはうまくいきました(+1)が、他の人への回答として投稿しているより最小限の例のためにそれを微調整しました:

フォームは必要ありません。2つの入力タグだけが必要です。

  • autocomplete = "off" 希望のフィールドに

    <input ... autoComplete="off" />

  • autocomplete = "on" 偽の隠されたフィールドに

    <input

    id="fake-hidden-input-to-stop-google-address-lookup"
    autoComplete="on"
    style={{ display: 'none'}}>
    

IDは、コメントを使用せずに実際にハッキングされているものを文書化するために私が持っている最高のものです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.