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