Tạo trang để yêu cầu trình duyệt không lưu trữ / bảo toàn giá trị đầu vào


116

Hầu hết các trình duyệt bộ đệm mẫu giá trị đầu vào. Vì vậy, khi người dùng làm mới một trang, các đầu vào có cùng giá trị.

Đây là vấn đề của tôi. Khi người dùng nhấp vào Lưu , máy chủ sẽ xác thực dữ liệu đã đăng (ví dụ: sản phẩm đã kiểm tra) và nếu không hợp lệ, sẽ gửi lại cho trình duyệt. Tuy nhiên, như đã nêu ở trên, ngay cả khi máy chủ xóa lựa chọn cho một số giá trị, chúng vẫn có thể được chọn do bộ đệm của trình duyệt!

Dữ liệu của tôi có các hộp kiểm vô hình (cho đến khi mục cha mẹ được chọn), do đó người dùng thậm chí không biết rằng một số giá trị trước đó vẫn được chọn, cho đến khi nhấp vào Lưu lại và nhận được thông báo lỗi - mặc dù người dùng nghĩ rằng nó không phải. Mà là khó chịu.

Điều này có thể được giải quyết bằng cách làm Ctrl+ F5, nhưng nó thậm chí không phải là một giải pháp. Có cách nào tự động / lập trình để báo cho trình duyệt không lưu bộ đệm dữ liệu đầu vào trên một số biểu mẫu / trang không?


1
<form autocomplete="off"...một lựa chọn cho bạn? Là vấn đề này xảy ra trên tất cả các trình duyệt, hoặc chỉ một vấn đề cụ thể?
David Kolar

Có cách nào để trả lời câu hỏi này với tham chiếu để thả xuống <select>danh sách. Tôi có một danh sách và đã xác định selectedlựa chọn nhưng làm mới trang vẫn giữ các tùy chọn đã chọn trước đó.
Martin

Tôi muốn đạt được điều ngược lại - bảo toàn các giá trị đầu vào của mỗi trang trên nút quay lại (nhấp lại hai lần - nhận đầu vào tương ứng). Có nhiều ví dụ khác nhau xung quanh việc sử dụng nhiều mã JS, (không thực sự hoạt động IMHO) nhưng - có cách nào đơn giản hơn không? Tôi đã thử tự động hoàn thành = "bật" trên cả trường mẫu và trường nhập - không hoạt động. Trình duyệt là Chrome.
Dmitry z

Câu trả lời:


196

Bạn rõ ràng đặt các giá trị là trống? Ví dụ:

<input type="text" name="textfield" value="">

Điều đó sẽ dừng các trình duyệt đưa dữ liệu vào nơi không nên. Ngoài ra, bạn có thể thêm autocompletethuộc tính vào thẻ biểu mẫu:

<form autocomplete="off" ...></form>

1
Tôi nói về các hộp kiểm để tôi không thể đặt giá trị thành "". Và, tự động tắt có nghĩa là không lưu trữ các giá trị đầu vào của biểu mẫu "khi người dùng nhấn F5", không chỉ "cho danh sách tự động hoàn thành thả xuống"?
nữ hoàng3

2
Theo developer.mozilla.org/en/How_to_Turn_ Offer_Form_Autocompletion, autcompletion = off ảnh hưởng đến "Bộ nhớ cache lịch sử phiên", ít nhất là trong Gecko. Tôi sẽ kiểm tra nếu nó hoạt động cho những gì tôi cần.
nữ hoàng3

1
@ queen3: Có, các hộp kiểm là một vấn đề vì không có cách nào để nói rõ ràng "không được kiểm tra". Nếu bạn vẫn gặp sự cố, bạn có thể thử checked="false", nó có thể hoạt động trong một số trình duyệt. Một cách khác là sử dụng Javascript / jQuery để bỏ chọn tất cả các hộp kiểm khi tải trang.
DisgruntledGoat

1
@ queen3, ý bạn là "autocomplete = off" chứ không phải "autocompletion = off"
Matt Baker

2
Tất cả các câu trả lời và đề xuất không làm việc cho tôi. Sử dụng chrome và phát lại .net
hakan

45

Từ một tham chiếu Stack Overflow

Nó không hoạt động với value = "" nếu trình duyệt đã lưu giá trị, do đó bạn nên thêm.

Đối với thẻ đầu vào có thuộc tính tự động hoàn thành, bạn có thể đặt:

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

Bạn cũng có thể sử dụng tự động hoàn thành cho một biểu mẫu.


9
Trong Chrome, nó dường như autocomplete="off"không có tác dụng khi được sử dụng trên các thành phần biểu mẫu riêng lẻ - ngay cả với valuethuộc tính được đặt rõ ràng trống và trong khi gửi Cache-Control: Must-Revalidatetiêu đề, điều này không có hiệu lực. Tôi đã phải áp dụng autocomplete="off"thuộc tính cho <form>chính phần tử để triệt tiêu hành vi này trong Chrome.
mindplay.dk 18/07/13

tôi đã tự động hoàn thành = "tắt" trên biểu mẫu nhưng nó không hoạt động với tôi
Kingsley Simon

Tôi cần thêm thông tin @KingsleySimon như trình duyệt và bạn có thể có một số cài đặt trên trình duyệt của mình để ngăn chặn hành vi chính xác
shareef

1
có vẻ như hành vi của trình duyệt đã thay đổi: developer.mozilla.org/en-US/docs/Web/Security/
mẹo

và được lưu ý mẫu hợp lệ html. và ví dụ, nó không phải là một hình thức khác, v.v.
shareef

10

Một cách tiếp cận khác là đặt lại biểu mẫu bằng JavaScript ngay sau biểu mẫu trong HTML:

<form id="myForm">
  <input type="text" value="" name="myTextInput" />
</form>

<script type="text/javascript">
  document.getElementById("myForm").reset();
</script>

8

Về cơ bản, có hai cách để xóa bộ đệm:

<form autocomplete="off"></form>

hoặc là

$('#Textfiledid').attr('autocomplete', 'off');

6

Điều này làm việc cho tôi trong các trình duyệt mới hơn:

autocomplete="new-password"
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.