8

I've stumbled across this issue a couple of times in the last while, where Chrome ignores autocomplete="false" and autocomplete="off". It will now even ignore autocomplete="whatever" or anything you do to trick it, if someone has submitted a form with that random "hack" in it before.

In trying to solve this issue, I came across this StackOverflow question, which doesn't solve the problem if you've submitted a form containing this field before.

EDIT: This is NOT for password fields.

Rob
  • 13,342
  • 26
  • 40
  • 60
3Dom
  • 637
  • 2
  • 8
  • 20
  • 1
    @JosephSible-ReinstateMonica This isn't breaking password managers, it's not for a password field at all. My web-app cannot have this field autocompleted. Not an option. Chrome needs to start respecting the directives in the HTML spec. This is NOT for password fields. Besides, password fields have the type="password" set on them, which would make this hack ineffective. – 3Dom Mar 15 '20 at 04:42
  • It is important to know that if you turn off autocomplete, you are breaking the rule 1.3.5: Identify Input Purpose in WCAG 2.1. If you are making a website that should follow WCAG, you should use autocomplete with autofill. https://www.w3.org/WAI/WCAG21/Understanding/identify-input-purpose.html – Stuart Aug 25 '20 at 10:17
  • 1
    @Stuart it is not for a browser to dictate how the designer uses a field. If the option to turn it off is in the toolset, it should work, and the browser should obey the directive. It shouldn't then create its own rules as some sort of omnipotent dictator. – 3Dom Aug 26 '20 at 00:04
  • That is not what I am saying. It is for the web designer to comply with the design principals of the web. And it should be that the designer helps, not hinder the user of their pages. – Stuart Aug 27 '20 at 06:18
  • It seems that the most recent answer for this problem is there : https://stackoverflow.com/questions/15738259/disabling-chrome-autofill#answer-30976223 – Foxlab Oct 09 '20 at 13:11
  • @Stuart "you are breaking the rule 1.3.5: Identify Input Purpose in WCAG 2.1".That's what the HTML label is for, is it not? Autocomplete is designed to help browsers provide automation in forms, not identify the field to the user (see https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete). Specifically note: "lets web developers specify what **if any** permission the user agent has to provide automated assistance in filling out form field values" – Francois Carstens Jan 20 '21 at 21:11
  • @FrancoisCarstens Well yes and no. The value of autocomplete="off" just means that I am not going to tell you what this field is for, not not to try and fill it. So if you are an evil web developer you set it to off, and frustrate users of your site, and receive more inaccurate data entries. The point is that all browsers and password managers will still fill in fields with autocomplete="off", so it is better to set this to the correct value of the data you are expecting. – Stuart Jan 22 '21 at 15:30

10 Answers10

4

I had this issue with a field that has "number" in the name and this triggering the CreditCard Autocomplete Dialog. This solution helped me get rid of it.

Even though this is not the intended use of the option, I think this is unlikely to break and works without JavaScript Hacks. A one time code won't trigger an autocomplete so I treat the fields that are not supposed to autocomplete as one time codes.

<input type="text" name="number" autocomplete="one-time-code" />

This did the trick for me. I tested it in Chrome 87.0.4280.141 and it works fine.

risutoru
  • 145
  • 1
  • 11
  • For me, simply including the name attribute works to prevent autocomplete suggestions from showing – Kai Durai Jan 19 '21 at 14:55
  • @KaiDurai you go into that ? Since in my case I couldn't remove the autocomplete by adding or removing the name attribute. If your name attribute matches one of their regex or you have a label with it, you should get the autocomplete. No avoiding that at least that's what I could confirm and what research showed as well. – risutoru Jan 21 '21 at 08:13
  • Despite this not working for my purposes at all, it is the highest voted answer. My answer, with 5 downvotes, is the most satisfactory, bulletproof answer, and I have tested all the mentioned options. Yeah, mine is hacky, but at least it will continue to work and is the most robust of any proposed. – 3Dom May 25 '21 at 11:22
2

its work in my local machine try it...

<input type="email" class="form-control" id="email" name="email" placeholder="Enter Email"  readonly onfocus="this.removeAttribute('readonly');" style="background-color: white;">
Mohammad Malek
  • 617
  • 1
  • 6
  • 16
1

autocomplete="new-password" and set placeholder attribute with some text works for me.

<input name="name1" placeholder="Nº" type="text" autocomplete="new-password" />
Pipebugs
  • 19
  • 1
  • This one did work for me, where as most of the rest did not. (As of 1/6/2020) - Is there any indication or documentation about why "new-password" actually manages to prevent the autocomplete, while no other attribute/value combo seems to work. Also I didn't seem to need the placeholder value to make it work. – bobbysmith007 Jan 08 '21 at 18:56
0

here is JS solution that works at this point in time for me:

<input name="name" type="text"
        onfocus="this.__name = this.getAttribute('name'); this.removeAttribute('name')"
        onblur="this.setAttribute('name',this.__name)"
        >

The above js code stores input name to this.__name and removes the name onfocus later onblur name is restored so forms can work as expected, but chrome does not autofill.

Davor Hrg
  • 167
  • 1
  • 9
  • I already answered my own question and it does a better job of explaining it than you've done, even though your hack is good. – 3Dom Aug 23 '20 at 13:37
  • Actually chrome was ignoring even autocomplete="whatever" at the time I wrote the mentioned JS hack :) ... so if somene else is as unlucky as I am, this JS hack could help. – Davor Hrg Aug 24 '20 at 14:23
0

Try to make your input readonly, enable it after focus

<input readonly="readonly" onfocus="this.removeAttribute('readonly');" type="text" value="test">
Josh
  • 29
  • 5
  • I don't like this solution at all. It doesn't seem foolproof or futureproof enough. My own answer is more solid. – 3Dom Aug 23 '20 at 13:37
0

Read the note at the bottom before using this method

After struggling for a long time, I made it work reliably this way:

It is important that your input type is 'text'!!

define a css class

input.hidden-password {
  -webkit-text-security: disc;
}

Then in your form, set autocomplete off, input types = 'text' and add the class to the input.

<form autocomplete="off">
    <input
      type = "text" // <----This is important
      class = "hidden-password"
    />
</form>

C'mon Google, let us take control over our inputs! My client requires passwords to be changed very often and auto fill IS A BIG NO NO!


IMPORTANT NOTE Do not use this for login or any other place where security is required. I used this for a form within my app where the user was already authenticated and security was not required.


Thales Kenne
  • 1,765
  • 6
  • 20
0

No known attribute value is working in form tag. I have tried them all: do-not-show-ac, chrome-off, new-password, off...

The only way i found is by adding autocomplete='new-password' to every input component. To do it globaly, i am using this jquery:

    <script>
        $('input').attr('autocomplete', 'new-password');
    </script>
tak3shi
  • 2,089
  • 1
  • 16
  • 31
0

The best way is to use JavaScript to skip browser's behavior, disableautofill.js does this.

You can try https://github.com/terrylinooo/disableautofill.js

<script src="https://cdn.jsdelivr.net/npm/disableautofill@2.0.0/dist/disableautofill.min.js"></script>

Usage:

 var daf = new disableautofill({
    'form': '#testForm', // Form id
    'fields': [
        '.test-pass',  // password
        '.test-pass2'  // confirm password
    ],
    'debug': true,
    'callback': function() {
        return checkForm(); // Form validator
    }
});

daf.init();
Dharman
  • 21,838
  • 18
  • 57
  • 107
Terry Lin
  • 2,082
  • 16
  • 19
0

How about just never submit the form? Nothing to remember!
Your app probably doesn't work without javascript anyway, right?

In fact, don't use a form at all, just collect the input values, serialize and do an ajax call.

$('#mybutton').on('click', function (e) {
    $.ajax({
        type: "POST",
        url: 'mybackend',
        data: $('#formdiv input').serialize(),
        success: function (data) ...

Mind you, this is not a well tested idea, just something I have observed when I wanted autofill, and which I have not seen suggested in any of the many threads dealing with this issue.

Alias_Knagg
  • 368
  • 2
  • 10
0

For Me, the problem only occurs, if I have multiple fields with the same value for autocomplete. If I set the value to a random number (Math.random()), no autocomplete is happening. I think it would also be possible to use an otherwise unique string.

Dharman
  • 21,838
  • 18
  • 57
  • 107
Stephan Hoyer
  • 4,121
  • 2
  • 25
  • 25