Ошибка с 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 на textbox динамически, а затем обновите страницу,textbox останется отключенным вместо сброса обратно в исходное состояние не отключено. Я пробовал это в IE8 и Chrome, и они ведут себя так, как я ожидал, сбрасывая textbox back to not disabled при обновлении.

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

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>s в ваших 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 (например, между < и >) и не больше, чем (>) внутри открывающего тега.