Tắt tính năng tự động hoàn thành qua CSS


94

Có thể sử dụng CSS để tắt tính năng tự động hoàn thành trên một phần tử biểu mẫu (cụ thể là trường văn bản) không?

Tôi sử dụng thư viện thẻ không cho phép phần tử tự động hoàn thành và tôi muốn tắt tính năng tự động hoàn thành mà không sử dụng Javascript.

Câu trả lời:


52

Bạn có thể sử dụng được tạo idnamemọi lúc, khác nhau, vì vậy trình duyệt không thể nhớ trường văn bản này và sẽ không đề xuất một số giá trị.

Đây ít nhất là giải pháp thay thế an toàn cho nhiều trình duyệt, nhưng tôi khuyên bạn nên đi với câu trả lời từ RobertsonM ( autocomplete="off").


4
Một tác dụng phụ của việc này là lịch sử trình duyệt bị lộn xộn với nhiều trường biểu mẫu (ngẫu nhiên) khác nhau. Mỗi lần tra cứu các giá trị đã biết trong kho dữ liệu cục bộ của trình duyệt sẽ mất một khoảng thời gian.
dermatthias

4
Ý tưởng hay, nhưng nó không ngăn số thẻ tín dụng được lưu vào cơ sở dữ liệu tự động điền chưa được mã hóa.
Hans-Peter Storr

Nếu bạn không sử dụng tên / id điều khiển tĩnh thì mọi tập lệnh sẽ bị hỏng và mọi thu thập dữ liệu biểu mẫu cũng sẽ bị hỏng (trừ khi mọi khía cạnh của ứng dụng của bạn đều biết về quy ước đặt tên mới và đang cập nhật động mọi tập lệnh / thu thập dữ liệu ).
Gary Richter

Tôi bạn phải tránh tự động điền, "ngẫu nhiên hóa" tên trường là cách thực sự duy nhất để đi. Việc sử dụng bất kỳ gợi ý nào như autocomplete="off"sẽ bị bỏ qua trong phiên bản Trình duyệt X (hiện tại + 1). (Ví dụ, mới nhất của Google Chrome bỏ qua autocomplete = off.)
Mikko Rantalainen

@kmoser: Ngay cả khi bạn đánh bại tính năng tự động hoàn thành của trình duyệt bằng cách ngẫu nhiên hóa phần tử, idnó vẫn sẽ lưu nó trong bộ nhớ cache (tức là trên ổ cứng của người dùng.) Đây là một điều khủng khiếp đối với số thẻ tín dụng của ai đó hoặc bất kỳ thông tin nhạy cảm nào khác. Ngoài ra, nó làm lộn xộn ổ đĩa của người dùng một cách không cần thiết. Mỗi lần họ truy cập trang của bạn, một tệp mới (giống cookie) sẽ được lưu trên máy tính của họ. Chỉ vì lý do này, hãy thử xóa bộ nhớ cache của Chrome và xem nó sẽ giải phóng bao nhiêu dung lượng (nếu bạn chưa thực hiện việc này trong một thời gian). Đó là lý do tại sao tôi gọi đó là một ý tưởng khủng khiếp.
c00000fd

129

Như thường lệ, không có thuộc tính "autocomplete off" trong CSS. Tuy nhiên, html có một mã dễ dàng cho việc này:

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

Nếu bạn đang tìm kiếm một effector trên toàn trang web, một cách dễ dàng là chỉ cần có một hàm js để chạy qua tất cả các 'đầu vào' và thêm thẻ này hoặc tìm kiếm lớp / id css tương ứng.

Thuộc tính tự động hoàn thành hoạt động tốt trong Chrome và Firefox (!), Nhưng hãy xem thêm Có cách hợp lệ nào của W3C để tắt tính năng tự động hoàn thành trong biểu mẫu HTML không?


4
developer.mozilla.org/en-US/docs/Web/Security/… gợi ý autocomplete="anyrandominvalidvalue"sẽ hoạt động.
Andrew Stalker

49

bạn có thể dễ dàng thực hiện bằng jQuery

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

4
Trong phần lớn trường hợp, $ ('form'). Attr ('autocomplete', 'off'); hiệu quả hơn nhiều (xem bình luận cho câu trả lời bên dưới)
irakli

@irakli Trong trường hợp của tôi, sử dụng formlà điều DUY NHẤT hiệu quả. Không input. Cảm ơn.
khaverim

1
Xin chào, năm 2018 và đây chỉ là cách duy nhất để tôi có thể làm việc này vào những ngày này. Ngoài ra, @irakli điều này đúng nếu bạn cần sử dụng trên toàn bộ biểu mẫu, chúng tôi biểu mẫu làm bộ chọn.
Devon Kiss,

15

Nếu bạn đang sử dụng, formbạn có thể tắt tất cả các tự động hoàn thành với,

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

thực sự, theo Mozilla: "Nếu thuộc tính tự động hoàn thành không được chỉ định trên phần tử đầu vào, thì trình duyệt sử dụng giá trị thuộc tính tự động hoàn thành của chủ sở hữu biểu mẫu của phần tử <input>. Chủ sở hữu biểu mẫu là phần tử biểu mẫu mà phần tử <input> này là một phần tử con của hoặc phần tử biểu mẫu có id được chỉ định bởi thuộc tính biểu mẫu của phần tử đầu vào. Để biết thêm thông tin, hãy xem thuộc tính tự động hoàn thành trong <form>. " coi đây là một giải pháp thay thế jQuery hiệu quả hơn nhiều so với cách hiển thị ở trên sẽ là: $ ('form'). attr ('autocomplete', 'off');
irakli

13

CSS không có khả năng này. Bạn sẽ cần sử dụng kịch bản phía máy khách.


1
Bất kỳ ý tưởng làm thế nào để vô hiệu hóa điều này trong cạnh? Không có vấn đề gì chúng ta làm chúng ta thấy nó.
Benjamin Gruenbaum

@BenjaminGruenbaum Sử dụng autocomplete="false"sẽ hoạt động trong Edge. Về mặt kỹ thuật, bất kỳ giá trị không hợp lệ nào có thể thay cho "false" ở đây.
Andrew

4

Tôi đã thử tất cả các cách được đề xuất từ ​​câu trả lời câu hỏi này và các bài viết khác trên web nhưng vẫn không hoạt động. Tôi đã thử autocomplete = "new-random-value", autocomplete = "off" trong phần tử biểu mẫu, sử dụng tập lệnh phía máy khách như bên dưới nhưng bên ngoài $ (document) .ready () với tư cách là một trong những người dùng được đề cập:

$(':input').on('focus', function () {
  $(this).attr('autocomplete', 'off')
});

Tôi thấy có thể một ưu tiên khác trong trình duyệt gây ra hành vi kỳ lạ này! Vì vậy, tôi đã tìm kiếm nhiều hơn và cuối cùng, tôi đọc lại cẩn thận những dòng dưới đây từ bài báo hay này :

Vì lý do này, nhiều trình duyệt hiện đại không hỗ trợ autocomplete = "off" cho các trường đăng nhập:

Nếu một trang web đặt autocomplete = "off" cho a và biểu mẫu bao gồm các trường nhập tên người dùng và mật khẩu, thì trình duyệt sẽ vẫn đề nghị ghi nhớ thông tin đăng nhập này và nếu người dùng đồng ý, trình duyệt sẽ tự động điền các trường đó vào lần tiếp theo người dùng truy cập trang. Nếu một trang web đặt autocomplete = "off" cho các trường tên người dùng và mật khẩu, thì trình duyệt sẽ vẫn đề nghị ghi nhớ thông tin đăng nhập này và nếu người dùng đồng ý, trình duyệt sẽ tự động điền các trường đó vào lần tiếp theo người dùng truy cập trang. Đây là hành vi trong Firefox (kể từ phiên bản 38), Google Chrome (kể từ 34) và Internet Explorer (kể từ phiên bản 11).

Nếu bạn đang xác định trang quản lý người dùng nơi người dùng có thể chỉ định mật khẩu mới cho người khác và do đó bạn muốn ngăn việc tự động điền các trường mật khẩu, bạn có thể sử dụng autocomplete = "new-password" ; tuy nhiên, hỗ trợ cho giá trị này chưa được triển khai trên Firefox.

Nó chỉ hoạt động. Tôi đã thử trong chrome đặc biệt và tôi hy vọng điều này tiếp tục hoạt động và giúp ích cho những người khác.


1

Tôi đã giải quyết vấn đề bằng cách thêm tên tự động hoàn thành giả cho tất cả các đầu vào.

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

0

Nhờ giải pháp của @ ahhmarr, tôi đã có thể giải quyết vấn đề tương tự trong Angular + ui-router của mình môi trường , tôi sẽ chia sẻ ở đây cho những ai quan tâm.

Trong của tôi, index.htmltôi đã thêm tập lệnh sau:

<script type="text/javascript">
    setTimeout(function() {
        $('input').attr('autocomplete', 'off');
    }, 2000);
</script>

Sau đó, để bao gồm các thay đổi trạng thái, tôi đã thêm phần sau vào bộ điều khiển gốc của mình:

$rootScope.$on('$stateChangeStart', function() {
                $timeout(function () {
                    $('input').attr('autocomplete', 'off');
                }, 2000);
            });

Thời gian chờ dành cho html để hiển thị trước khi áp dụng jquery.

Nếu bạn tìm thấy một giải pháp tốt hơn, xin vui lòng cho tôi biết.


0

Bạn không thể sử dụng CSS để tắt tính năng tự động hoàn thành, nhưng bạn có thể sử dụng HTML:

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

Về mặt kỹ thuật, bạn có thể thay thế falsebằng bất kỳ giá trị không hợp lệ nào và nó sẽ hoạt động. IOS này là giải pháp duy nhất mà tôi đã tìm thấy cũng hoạt động trong Edge.


0

Có 3 cách để làm điều đó, tôi đề cập đến chúng theo thứ tự là cách tốt hơn ...

Cách 1-HTML:

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

Cách 2-Javascript:

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

3-jQuery cách:

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

0

Tôi chỉ sử dụng 'new-password'thay thế 'off'trên tự động hoàn thành.

và tôi cũng đã thử sử dụng mã này và hoạt động (ít nhất là về phía tôi), tôi sử dụng WP và GravityForm để biết thông tin của bạn

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

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

3
Điều này không cung cấp câu trả lời cho câu hỏi được hỏi. OP đã yêu cầu cụ thể một giải pháp CSS, Ngoài ra, nó cũng giống như câu trả lời đã tồn tại.
Holger Just
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.