Ошибка с Firefox - отключенный атрибут ввода не сбрасывается при обновлении - PullRequest
98 голосов
/ 13 мая 2011

Я обнаружил, что я считаю ошибкой в ​​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 обратно на не отключенный при обновлении.

Другая интересная информация состоит в том, что она все еще делает то же самое, если вводом является checkbox вместо textbox.

Ответы [ 3 ]

121 голосов
/ 13 мая 2011

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

Это останавливает работу автозаполнения и не позволяет браузеру запоминать состояние полей ввода.

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

8 голосов
/ 27 декабря 2013

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

    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);
    }
1 голос
/ 30 августа 2017

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

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

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

Допущения:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...