Firefox keeps form data on reload
Asked Answered
B

10

90

I have a big problem with the functionality in Firefox that keeps data that the user have filled in on reload F5. If i use Ctrl+F5 the forms are cleared and this is great. My problem is that not all my users know that this is what they have to do to force the input cleanup. Is there a way in the html or response headers to tell Firefox to not keep the data in the forms?

Backfire answered 11/9, 2011 at 9:10 Comment(10)
What about making a button that clears the forms? That seems easier for users to understand then letting them push f5Frigidarium
That is one idea but I don't want to bother my users with that.Backfire
Most users want to keep the form data on reload...Cermet
My problem is that many of my inputs are calculated and on reload the data becomes inconsistent if not everything is reset.Backfire
@Backfire in that case, why not do what Marek sugggests. Maybe only for the calculated fieldsMonoatomic
You could also recalculate everything on postback.Frigidarium
similar: https://mcmap.net/q/67532/-preventing-firefox-from-remembering-the-input-value-on-refresh-with-a-meta-tagUnderestimate
Please switch to a Chromium based browser. Firefox knows about this since 21 years, and they are not able or unwilling to behave like Chrome or Safari: bugzilla.mozilla.org/show_bug.cgi?id=46845#c232Thaler
See also html - Bug With Firefox - Disabled Attribute of Input Not Resetting When Refreshing - q/5985839 and 654072 - form input state (including disabled state and other properties) are cached across reloads and history navigation - bugzilla.mozilla.org.Persecute
Suggesting users switch browsers has to be a last ditch solution.Fain
B
123

Just add autocomplete="off" to your inputs and you will solve the problem.

<input type="text" autocomplete="off">

jQuery to solve this on all inputs and textareas

$('input,textarea').attr('autocomplete', 'off');
Backfire answered 11/9, 2011 at 9:27 Comment(8)
Instead you can add <form autocomplete="off"></form to disable this cache for the form entirelySuctorial
Unfortunately this also removes the functionality of autocomplete just by clicking on the form element (where it shows a drop down of previously entered values)Bargeman
But this solution does not work for page relad by pressing F5 button or firefox browser reload button.Dumpling
I've spent half a day to come to the fact that this is firefox trouble. Thank you for the solution.Isolationism
what about hidden fields? Firefox is persisting them as wellDiley
Doesn't seem like removing functionality should be the first option. This does make me wonder if this is why autocomplete doesn't seem to work on many sites I visit with Firefox.Fain
Doesn't work for hidden fields, Firefox will happily change them to whatever was there on the previous page load. This entirely breaks my app. Need another solution.Blent
Yeah this is bad. Should not be the accepted answer. It's not necessary to completely remove autocomplete functionality. Instead, you can just add the autocomplete="off" attribute to the form itself in the HTML, and then remove the attribute with javascript when then DOM is ready.Conference
S
16

Instead of going through all inputs you may also just add the attribute to your form-element like so:

<form method="post" autocomplete="off">...</form>

However the above mentioned methods on domReady did not work for me...

Salaried answered 30/1, 2014 at 10:35 Comment(2)
Best solution to this oppressive Firefox feature. Should be used with care; one may need some other method to avoid inadvertent user data loss.Proudfoot
Yes very nice solution, thank you MOZILLA... now I just need to update 8564 different pages and scripts, reupload them all, and retest the entire backend. Really convenient.Capybara
L
9

In case you want to keep the autocomplete feature of the browser (see other valid answers), try adding the name attribute to the form and give it a random value. It has worked for me:

<form id="my-form" name="<random-hash>">
...
</form>
Lapin answered 12/6, 2017 at 16:55 Comment(4)
This is a great idea, and I hope they don't work around it. It cuts down the middle, compromise-wise.Vasoinhibitor
You have to be able to put the unique string in at runtime, but if you can, this seems to work!Vasoinhibitor
That could be true. I just tried it with a form rendered by the the server.Lapin
Form autocomplete isn't always useful. Sometimes input controls are used without an enclosing Form tag, and ajax is used to submit the data without postback. In those situations, the autocomplete needs to be deactivated at the input control level.Hatten
A
7
/*reset form elements (firefox saves it)*/

function resetElements()
{
     var inputs = document.querySelectorAll('input[type=text]');
     //you get the idea.....you can retrieve all inputs by tag name input
     for(var i = 0; i < inputs.length; i++) {
         document.getElementsByTagName('input')[i].value = "";
     }
     var textareas = document.getElementsByTagName('textarea');
     for(var i = 0; i < textareas.length; i++) {
         document.getElementsByTagName('textarea')[i].value = "";
     }
}

Call this function onload.

Americanize answered 18/3, 2015 at 0:15 Comment(1)
What I like about a Javascript solution is that the input suggestions keep working, only the input field values are removed, whereas autocomplete="off" also disables the suggestions.Fanechka
C
5

I think easier and quicker way to do that is

$('input,textarea').attr('autocomplete', 'off');
Cist answered 13/5, 2012 at 23:6 Comment(1)
no.using jquery , it is not working. I think autocomplete off will work if jquery code execute before autocomplete by browser !!!!Agone
P
5

I tried the shortened solution above, but it didn't clear the value of the select boxes on my page.

I ended up modifying it slightly and now all input types on the page are cleared regardless of type:

var allInputs = $(":input");
$(allInputs).attr('autocomplete', 'off');

So to make this run onload I just put it in the ready() method:

$(document).ready(function () {
    var allInputs = $(":input");
    $(allInputs).attr('autocomplete', 'off');
});
Parmer answered 30/11, 2012 at 19:9 Comment(1)
Re: "... above ...", note that answers are sortable and gets reorded based on votes etc.Phototube
S
4

I found the only fix for me was to do

document.forms[0].reset();

before doc ready early in the page, as suggested in the comment by @Marek above - not great but worked for me (the autocomplete attribute method via either jQuery, JS or HTML didn't in the end fix it for me)

Seasickness answered 3/1, 2019 at 17:51 Comment(1)
Exactly what I was searching for, thanks!Strategic
A
2

just to piggyback on @jonnybradley's solution (couldn't comment on his answer because I don't have enough rep yet):

This also worked perfectly form me:

document.getElementById('theFormId').reset();

called after the HTML code.

Aphorize answered 24/1, 2021 at 6:39 Comment(0)
M
0

one of my colleagues recommended that we should use a random string as the name of the form. It works very well if you don't use the name attribute of the form.

it is an example from the sf1 form builder:

public function renderFormTag($url, array $attributes = [])
{
    ..
    $attributes['name'] = isset($attributes['name']) ? $attributes['name'] : bin2hex(random_bytes(16));
    ..
}
Moitoso answered 20/11, 2020 at 11:36 Comment(0)
V
0

autocomplete="off" is also needed for hidden input fields in order to have them refreshed on simple page reload (F5)

Vainglorious answered 4/1, 2022 at 23:12 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.