Ошибка с Firefox-отключенный атрибут ввода не сбрасывается при обновлении


Я нашел то, что я считаю ошибкой с Firefox, и мне интересно, действительно ли это ошибка, а также любые обходные пути для этого.

если вы создаете обычную веб-страницу со следующим кодом:

<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>

если вы disable the textbox динамически, а затем обновить страницу,textbox останется отключенным вместо сброса обратно в исходное состояние не отключено. Я пробовал это в IE8 и Chrome, и они ведут себя так, как я ожидал, сбрасывая textbox вернуться к не отключен при обновлении.

еще один интересный бит информации заключается в том, что он по-прежнему делает то же самое, если вход checkbox вместо textbox.

3 93

3 ответа:

Это "функции" Firefox, который запоминает входные значения формы через страницу обновляется. Чтобы исправить это поведение, вы просто установите autocomplete="off" на форме, содержащей входы, или просто непосредственно на вход.

это останавливает автозаполнение от работы и предотвращает браузер от запоминания состояния полей ввода.

кроме того, вы можете просто "жестко обновить", нажав CTRL+F5. Это позволит полностью сбросить текущую страницу.

чтобы справиться с кнопкой назад, сделайте это (от здесь)

    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);
    }

Как упоминалось ранее, вам нужно добавить autocomplete="off" для кнопок.

здесь sh+perl сниппет для автоматизации этого в случае <button>в HTML-файлы/шаблоны (по некоторым предположениям):

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

предположения:

  • Открытие <button> теги начинаются и заканчиваются на одной линии. Если это не так (т. е. они могут быть разделены на несколько строк), а затем заменить /g С /gs должен помочь (the s модификатор причины . чтобы соответствовать новым строкам, а также)

  • допустимый HTML (например, между < и >) и не более чем (>) внутри открывающего тега.