React không tắt tính năng tự động hoàn thành


81

Làm cách nào để tôi thực hiện phản ứng hiển thị nó?

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

Câu trả lời:


154

Viết hoa "C" autoComplete. Điều này được đề cập trong tài liệu React:

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


16
Luôn luôn ném ra một ngoại lệ, không chỉ im lặng bỏ qua lỗi.
Yaroslav

1
@Yaroslav Có thể React sẽ đưa ra một cảnh báo cho điều này, nếu không, điều này sẽ github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/…
azium

1
Nhưng cũng không phải lỗi vì đạo cụ có thể là bất cứ thứ gì .. làm thế nào React biết được khi bạn đang tạo chỗ dựa của riêng mình hoặc sử dụng thuộc tính html?
azium

Đạo cụ không thể là bất cứ thứ gì đối với thẻ html.
Yaroslav

Tôi hiểu tại sao bạn lại nghĩ như vậy, nhưng hãy nhớ rằng các thẻ JSX này được chuyển xuống thành các lệnh gọi hàm bằng một chuỗi đại diện cho loại thẻ.
azium

64

Bạn nên đặt:

autoComplete="new-password"

Điều này sẽ xóa tự động hoàn thành


13
Tôi thực sự không hiểu tại sao điều này hoạt động thay vì "tắt". Kỳ dị.
Ajay


@Pim Có lý. Cảm ơn!
Ajay

1
Bạn là một huyền thoại, cảm ơn! Ngoài ra nó có ý nghĩa, tôi muốn lĩnh vực mới mật khẩu của tôi để không bị tự động hoàn tất: D
Erik Kubica

Có lẽ chrome đang nhận ra newbên trong tên. Tôi đặt tên cho nó bây giờ autoComplete="new-off"có ý nghĩa hơn một chút đối với tôi nếu nó không phải là trường mật khẩu và nó hoạt động tốt: D
kenny

7

Theo tài liệu của Mozilla , bạn phải đặt giá trị không hợp lệ để thực sự tắt tính năng tự động hoàn thành. Trong một số trình duyệt, các đề xuất tự động hoàn thành vẫn được đưa ra mặc dù thuộc tính được đặt thành tắt.

Điều này đã làm việc cho tôi (react-bootstrap):

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

Chà, thật kỳ lạ, nhưng đó là thứ duy nhất phù hợp với tôi cho đến nay.
Wylliam Judd

1
@Pim Mmm có giống nhau không autocompleteautofill? Bởi vì nó không hoạt động đối với tôi khi sử dụng Chrome. Nó tiếp tục tự động điền vào biểu mẫu với các giá trị trước đó được gửi với cùng một biểu mẫu.
alexventuraio

6

Nếu bạn đã đọc câu trả lời chính xác mà vẫn gặp sự cố này (đặc biệt là trong Chrome), chào mừng bạn đến với câu lạc bộ ... vì vậy hãy kiểm tra cách tôi đã hoàn thành nó:

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

Ghi chú

  • biểu mẫu không nhất thiết phải là mẹ trực tiếp của phần tử đầu vào
  • đầu vào cần một thuộc tính tên
  • nó cũng hoạt động với <FormControl/>thẻ React-Bootstrap (thay vì <input/>)

Nó không hoạt động. Tôi đang thử với Chrome 67. Không có gì. Tôi vẫn cần một đầu vào giả với hiển thị: không có! Rất điên!

Cảm ơn bạn đã phản hồi, nhưng trường hợp của bạn có đánh dấu vào tất cả 3 gạch đầu dòng không?
w3jimmy

Trong một số trường hợp, tôi vẫn nhận được đề xuất tự động về điều này. Xem câu trả lời của tôi để có một giải pháp hoàn chỉnh hơn.
Pim

3

autoComplete = "none" - phù hợp với tôi.


2
Chào mừng Alex. Cố gắng dài dòng hơn với câu trả lời của bạn. Suy ra rằng giải pháp của bạn hoạt động vì cách viết hoa của "autoComplete" là rất quan trọng.
Jennifer Goncalves

3

Không có giải pháp nào trong số này thực sự hoạt động trên Chrome 80.

Sau nhiều giờ thử nghiệm và gặp lỗi, bản hack rất lạ này đã làm việc với tôi:

  1. Thêm autoComplete="none"vào từng <input>- Google bỏ qua autocomplete = "tắt" ngay bây giờ
  2. Gói các trường của bạn trong một vùng chứa: <form>hoặc<div>
  3. Bạn cần ít nhất một trường nhập hợp lệ với autoComplete="on". Đây phải là phần tử cuối cùng trong vùng chứa. Vì vậy, tôi đã thêm trường nhập sau vào cuối biểu mẫu của mình:
<input 
  type="text" 
  autoComplete="on" 
  value="" 
  style={{display: 'none', opacity: 0, position: 'absolute', left: '-100000px'}} 
  readOnly={true}
/>

1

Địa ngục tự động hoàn thành của Chrome tắt bằng cách thêm thuộc tính mật khẩu mới.

autoComplete="new-password"

Trong hành động trông như thế này:

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

thảo luận thêm về:

Thảo luận Tự động Hoàn thành của Chrome


0

Ngoài câu trả lời của @ azium, <input>nên được đặt bên trong <form>thẻ, sau đó autoCompletehoạt động


0

Tôi đã giải quyết nó chỉ với một dòng:

Nếu bạn sử dụng cách được đề xuất với "changeHandler ()" và trạng thái thành phần, chỉ cần chèn:

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

Thông tin khác về thay đổi đóHandler () - Thing:
https://reactjs.org/docs/forms.html#controlled-components


2
khi google chrome AutoFills đầu vào của tôi, e.isTrusted là đúng: D
IvanY

0

Tôi cũng đã thử nhiều tùy chọn, nhưng cuối cùng những gì tôi làm là thay thế <form>thẻ bằng <div>thẻ và quản lý thủ công từng đầu vào mà tôi có trong biểu mẫu đó.


0

Đây là thông báo "Nó hoạt động trên máy của tôi"

Phiên bản Chrome 83.0.4103.116 và React. Có vẻ như mẹo hiệu quả với tôi là đặt nó vào bên trong biểu mẫu và thêm thuộc tính autoComplete . Lưu ý Nếu bạn thử điều này trên một ứng dụng không phản ứng, bạn sẽ phải thực hiện tự động hoàn thành với chữ C viết thường

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

<form autoComplete="new-password">
  <input type="text" autoComplete="new-password" />
</form>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.