Disable Form Autocomplete

Disabling a visitor's browser's built-in form autocomplete feature sounds like it should be a simple enough task, but like many seemingly mundane things in web design it's a bit asinine. I have personally never had to do this until yesterday when I made an AJAX-based autocompleting search field and realized it didn't do much good hiding behind the browser's. It could also be useful to avert the visitor's autocomplete where the data shouldn't be remembered by the browser (like credit card numbers) or re-entered for verification (like e-mail addresses).

The easiest method (and the one with which I went) is to add the


attribute to your <form> or individual <input> tags. According to Mozilla Developer Network's How to Turn Off Form Autocompletion:

This form attribute was first introduced in Microsoft's Internet Explorer 5. Netscape introduced it in version 6.2 -- in prior versions, this attribute is ignored. The autocomplete attribute was added at the insistance of banks and card issuers, but prior to HTML5 was never part of an official standard.

In practical terms this means the autocomplete attribute is perfectly valid and there is no good reason you shouldn't use it. In ideological terms, unless you are using it in an HTML5 document, the attribute is not valid HTML and will fail a validation test.

Sometimes it's OK to be a rebel. Sometimes there's a cheat code, though. It's possible to set this attribute in JavaScript and produce flawless HTML. There is only one drawback: those with JavaScript disabled (no one) will not be affected:

var q = document.getElementById('query');
q.autocomplete = 'off';

An alternative I thought of but rejected on the grounds that it would make untidy URLs is the use of hidden <input>s and the onchange event handler. It could work well for POSTed forms, however:

<input type="hidden" name="query" id="query">
<input type="text" name="<?php echo md5(time()); ?>" onchange="document.getElementById('query').value = this.value;">


There are no comments for this item.