'autocomplete="off"'在Chrome 中不起作用

我们在表单输入框中输入信息,提交表单后,当我们再次进入表单页面,双击输入框时,会出现之前提交的信息,这是因为浏览器一般会记录下输入框之前提交表单的信息。这就是这篇文章要讲的autocomplete.

AutoComplete控件就是指用户在文本框输入前几个字母或是汉子的时候,该控件就能从存放数据的文本或是数据库里将所有以这些字母开头的数据提升给用户,供用户选择,提供方便。

输入框(input,textarea, select)的AutoComplete的默认值是on,其含义代表是否让浏览器自动记录之前输入的值。

有时用户不希望记录之前输入的值,这时就需要关闭AutoComplete。

1. 我们通过在form表单上加入,或者对一些输入框单独加入autocomplete="off",就能达到关闭AutoComplete的目的。

1.1 在form表单上加入autocomplete="off".  

  <form method="post" action="login.php" name="login" autocomplete="off">

  </form>

1.2 在输入框中加入autocomplete="off"

  <input id="username" type="text" name="username" maxlength="20"  autocomplete="off">

 

2. 但是有一种情况例外,就是表单中有input[type="password"],点击保存密码后,在Chrome浏览器则自动填充了用户名和密码的输入框,而IE和Firefox则不同。为了统一浏览器样式,我们需要就Chrome的问题修改。

提供3钟解决方法

2.1 修改value值

(function(){
  if(navigator.userAgent.toLowerCase().indexOf("chrome") != -1){
    var selectors = document.getElementsByTagName("input");
    for(var i=0;i<selectors.length;i++){
    if((selectors[i].type !== "submit") && (selectors[i].type !== "password")){
      selectors[i].value = " ";
    }
  }
  setTimeout(function(){
    for(var i=0;i<selectors.length;i++){
      if(selectors[i].type !== "submit"){
        selectors[i].value = "";
      }
    }
  },100)
  }
})()

2.2 修改disabled属性

(function(){
  if(navigator.userAgent.toLowerCase().indexOf("chrome") != -1){
    var selectors = document.getElementsByTagName("input");
    for(var i=0;i<selectors.length;i++){
    if((selectors[i].type !== "submit") && (selectors[i].type !== "password")){
      selectors[i].disabled= true;
    }
  }
  setTimeout(function(){
    for(var i=0;i<selectors.length;i++){
      if(selectors[i].type !== "submit"){
        selectors[i].disabled= false;
      }
    }
  },100)
  }
})()

2.3 removes "name" and "id" attributes

(function(){
  if(navigator.userAgent.toLowerCase().indexOf("chrome") != -1){
    var selectors = document.getElementsByTagName("input");
    for(var i=0;i<selectors.length;i++){
      if((selectors[i].type !== "submit") && (selectors[i].type !== "password")){
        var input = selectors[i];
        var inputName = selectors[i].name;
        var inputid = selectors[i].id;

        selectors[i].removeAttribute("name");
        selectors[i].removeAttribute("id");
        setTimeout(function(){
          input.setAttribute("name",inputName);
          input.setAttribute("id",inputid);
        },1)
      }

    }

  }
})()

个人比较推荐第三种方法,通过移除input的name和id来达到效果

 

posted on   加油_linda  阅读(5311)  评论(1编辑  收藏  举报

编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示