Lỗi với Firefox - Thuộc tính đầu vào bị vô hiệu hóa Không đặt lại khi làm mới


103

Tôi đã tìm thấy thứ mà tôi tin là lỗi với Firefox và tôi đang tự hỏi liệu đây có thực sự là một lỗi hay không cũng như bất kỳ cách giải quyết nào cho vấn đề này.

Nếu bạn tạo một trang web cơ bản với nguồn sau:

<html>
  <head>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.min.js"></script>
  </head>
  <body>
    <div>
      <input id="txtTest" type="text" />
      <input type="button" onclick="$('#txtTest').attr('disabled','disabled');" value="Set Disabled (jQuery)" />
      <input type="button" onclick="document.getElementById('txtTest').disabled = true;" value="Set Disabled (js)" />
      <input type="button" onclick="$('#txtTest').removeAttr('disabled');" value="Remove Disabled" />
    </div>
  </body>
</html>

Nếu bạn disabletextboxđộng và sau đó làm mới trang, textboxsẽ vẫn bị vô hiệu thay vì thiết lập lại trở lại tình trạng ban đầu của nó không khuyết tật. Tôi đã thử điều này trong IE8 và Chrome và những thứ đó hoạt động như tôi mong đợi, đặt lại mặt textboxsau để không bị tắt khi tôi làm mới.

Một thông tin thú vị khác là nó vẫn hoạt động tương tự nếu đầu vào là a checkboxthay vì a textbox.


2
Bạn có chắc đó không chỉ là "tính năng" của Firefox, nơi nó ghi nhớ trạng thái của inputcác phần tử khi bạn chỉ cần làm mới?
30

@thirtydot: Tôi cũng tự hỏi về điều đó, vì vậy tôi cũng đã thử thử nghiệm với việc đặt động thuộc tính "size" và điều đó sẽ được đặt lại khi làm mới, giống như tất cả các trình duyệt khác. Vì vậy, nó trông giống như những gì tôi đã phát hiện cho đến nay là Firefox sẽ giữ lại các thuộc tính tàn tật cũng như giá trị thực tế của đầu vào, nhưng không phải là kích thước ...
Stephen Mesa

5
Wow, bạn nói đúng! Tôi đặt autocomplete = "off" trên đầu vào và điều này không còn xảy ra nữa. Điều đó khá bất tiện khi firefox bật theo mặc định!
Stephen Mesa

3
Vâng, tôi đã quên bạn có thể vô hiệu hóa nó với autocomplete="off". Bài đăng trên blog này trông quen thuộc với tôi, vì vậy tôi chắc chắn đã xem qua bài này trước đây. Bạn nên viết câu trả lời cho câu hỏi của riêng bạn (hay tôi nên làm?)
30

1
Có một báo cáo lỗi mở của Mozilla về điều này: bugzilla.mozilla.org/show_bug.cgi?id=654072
cvrebert

Câu trả lời:


126

Đây là một "tính năng" của Firefox giúp ghi nhớ các giá trị đầu vào của biểu mẫu qua các lần làm mới trang. Để khắc phục hiện tượng này, bạn chỉ cần đặt autocomplete="off"trên biểu mẫu có chứa đầu vào hoặc chỉ trực tiếp đến đầu vào.

Điều này ngăn tự động hoàn thành hoạt động và ngăn trình duyệt ghi nhớ trạng thái của các trường nhập.

Ngoài ra, bạn có thể chỉ cần "làm mới" bằng cách nhấp vào CTRL + F5. Điều này sẽ đặt lại hoàn toàn trang hiện tại.


4
Tôi chỉ gặp sự cố này khi người dùng nhấp vào nút quay lại, có vẻ như autocomplete="off"không hoạt động trong trường hợp đó.
solarc

1
tôi không muốn một biểu mẫu, tôi chỉ có một nút duy nhất và Firefox "ghi nhớ" nó đã bị vô hiệu hóa..annoying. Tôi có thể đặt lại nó thông qua JS nhưng..thật tuyệt.
vsync

@vsync Hãy thử đặt nó trên nút / phần tử đầu vào. Cũng nên làm việc!
Henrik Heimbuerger,

4
Bạn thậm chí phải làm điều này trên các nút. Tôi cảm thấy khó tin rằng đây là một tính năng chứ không phải một lỗi?
Liam

1
điều này cũng ảnh hưởng đến đầu vào ẩn cũng
Liam

10

Để đối phó với nút quay lại, hãy làm điều này (từ đây )

    window.addEventListener('pageshow', PageShowHandler, false);
    window.addEventListener('unload', UnloadHandler, false);

    function PageShowHandler() {
        window.addEventListener('unload', UnloadHandler, false);
    }

    function UnloadHandler() {
        //enable button here
        window.removeEventListener('unload', UnloadHandler, false);
    }

Tôi không biết tại sao câu trả lời này chỉ có một phiếu ủng hộ trong khi câu trả lời kia có 99. Khôi phục trạng thái bị vô hiệu hóa khi tải xuống tốt hơn là tắt tính năng tự động hoàn thành, vì tự động hoàn thành là một chức năng mong muốn.
Nick

Tôi nghĩ rằng điều đó //enable button herelà thừa ở đây; sự hiểu biết của tôi về các tài liệu được giới thiệu là đơn giản sự hiện diện của trình xử lý sự kiện sẽ ngăn trang được lưu trữ trong BFcache.
myf

Lưu ý rằng việc thêm trình xử lý dỡ bỏ có các tác dụng phụ khác trong Firefox: developer.mozilla.org/en-US/docs/Mozilla/Firefox/Releases/1.5/…
robocat

2

Như đã đề cập trước khi bạn cần thêm autocomplete="off"vào các nút của mình.

Dưới đây là sh+ perlđoạn mã để tự động hóa điều này trong trường hợp của <button>s trong tệp / mẫu HTML của bạn (theo một số giả định):

find /path/to/html/templates -type f -name '*.html' -exec perl -pi -e \
  's/(?<=<button )(.*?)(?=>)/@{[(index($1,"autocomplete=")!=-1?"$1":"$1 autocomplete=\"off\"")]}/g' \
  {} +

Các giả định là:

  • <button>Thẻ mở bắt đầu và kết thúc trên cùng một dòng. Nếu không đúng như vậy (tức là chúng có thể bị tách thành nhiều dòng) thì việc thay thế /gbằng /gssẽ giúp ích (công cụ ssửa đổi cũng khiến .nó khớp với dòng mới)

  • HTML hợp lệ (ví dụ: không có ký tự vui nhộn nào giữa <>) và không có ký tự thoát nào lớn hơn ( >) bên trong thẻ mở.


0

Đây thực sự là một lỗi mở trên Firefox. Cũng có một ghi chú trong MDN:autocomplete (cuộn xuống ô màu vàng thứ hai):

Lưu ý: autocompleteThuộc tính này cũng kiểm soát xem Firefox có - không giống như các trình duyệt khác - duy trì trạng thái động bị vô hiệu hóa và (nếu có) kiểm tra động của một <input>phần tử, <textarea>phần tử hoặc toàn bộ <form>qua các lần tải trang hay không. Tính năng bền bỉ được bật theo mặc định. Đặt giá trị của autocompletethuộc tính đểoff tắt tính năng này. Điều này hoạt động ngay cả khi thuộc tính tự động hoàn thành thường không áp dụng theo loại của nó. Xem lỗi 654072 .

Nếu bạn đang sử dụng Bootstrap, bạn có thể quan tâm đến

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.