如何通过代码有选择地禁用浏览器文本输入中的自动填充?

发布于 2024-08-15 13:35:39 字数 200 浏览 5 评论 0原文

是否可以使用代码有选择地禁用文本字段中的自动填充功能?

我正在 ASP.Net AJAX 中开发自定义代码以在数据库中搜索建议,并且我想防止当用户开始在文本框中键入内容时出现浏览器建议。

我正在寻找一种适用于最现代的浏览器(IE 7 和 8、Firefox、Safari 和 Chrome)的解决方案。如果解决方法是在 Javascript 中就可以了。

Is it possible to selectively disable the autofill feature in text fields using code?

I'm developing my custom code in ASP.Net AJAX to search for the suggestion in the database and I would like to prevent the browser suggestions from appearing when the user starts typing in the textbox.

I'm looking for a solution that works in the most modern browsers (IE 7 & 8, Firefox, Safari and Chrome). It's is ok if the workaround is in Javascript.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

凉薄对峙 2024-08-22 13:35:39

查看自动完成 HTML 属性(在表单或输入标记上)。

<form [...] autocomplete="off"> [...] </form>

W3C >自动完成属性

编辑:

如今 - 从评论来看 - 网络浏览器并不总是尊重自动完成标记定义的行为。这种不尊重可能会被一些 JavaScript 代码包围,但在使用它之前你应该考虑一下你想要做什么。

首先,字段将在页面加载期间填充,并且仅在页面加载后才会被清空。用户会质疑为什么该字段被清空了。

其次,这将重置其他网络浏览器机制,例如当您返回上一页时自动填充字段。

jQuery( function()
{
  $("input[autocomplete=off]").val( "" );
} );
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<form method="post" action="">
  <div class="form-group">
    <label for="username">Username</label>
    <input type="text" id="username" name="username" value="John" autocomplete="off">
  </div>
  <div class="form-group">
    <label for="password">Password</label>
    <input type="password" id="password" name="password" value="qwerty" autocomplete="off">
  </div>
  <input type="submit" value="Login">
</form>

Look at the autocomplete HTML attribute (on form or input tags).

<form [...] autocomplete="off"> [...] </form>

W3C > Autocomplete attribute

Edit:

Nowadays - from the comments - web browsers do not always respect the autocomplete tag defined behavior. This non-respect could be surrounded with a little of JavaScript code but you should think about you want to do before use this.

First, fields will be filled during the page loading and will only be emptied once the page load. Users will question why the field has been emptied.

Second, this will reset other web browser mechanisms, like the autofill of a field when you go back to the previous page.

jQuery( function()
{
  $("input[autocomplete=off]").val( "" );
} );
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<form method="post" action="">
  <div class="form-group">
    <label for="username">Username</label>
    <input type="text" id="username" name="username" value="John" autocomplete="off">
  </div>
  <div class="form-group">
    <label for="password">Password</label>
    <input type="password" id="password" name="password" value="qwerty" autocomplete="off">
  </div>
  <input type="submit" value="Login">
</form>

破晓 2024-08-22 13:35:39

你可以将它放入你的输入

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

中:或jquery

$(":input").attr("autocomplete","off"); 

you can put it into your inputs:

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

or in jquery

$(":input").attr("autocomplete","off"); 
悲凉≈ 2024-08-22 13:35:39

这个问题有两种解决方案。我在 Google Chrome v36 上测试了以下代码。
无论Autocomplete=off如何,最新版本的 Google Chrome 都会强制自动填充。以前的一些技巧不再起作用(34+ 版本)

解决方案 1:

将以下代码放在下面在

标签下。

<form id="form1" runat="server" >
<input style="display:none" type="text" name="fakeusernameremembered"/>
<input style="display:none" type="password" name="fakepasswordremembered"/>

...

了解更多

解决方案 2:

$('form[autocomplete="off"] input, input[autocomplete="off"]').each(function () {

                var input = this;
                var name = $(input).attr('name');
                var id = $(input).attr('id');

                $(input).removeAttr('name');
                $(input).removeAttr('id');

                setTimeout(function () {
                    $(input).attr('name', name);
                    $(input).attr('id', id);
                }, 1);
            });

它删除了“name”和“id”属性从元素中获取并在 1 毫秒后将它们分配回来。

There are 2 solutions for this problem. I have tested following code on Google Chrome v36.
Recent Version of Google Chrome forces Autofill irrespective of the Autocomplete=off.Some of the previous hacks don't work anymore (34+ versions)

Solution 1:

Put following code under under <form ..> tag.

<form id="form1" runat="server" >
<input style="display:none" type="text" name="fakeusernameremembered"/>
<input style="display:none" type="password" name="fakepasswordremembered"/>

...

Read more

Solution 2:

$('form[autocomplete="off"] input, input[autocomplete="off"]').each(function () {

                var input = this;
                var name = $(input).attr('name');
                var id = $(input).attr('id');

                $(input).removeAttr('name');
                $(input).removeAttr('id');

                setTimeout(function () {
                    $(input).attr('name', name);
                    $(input).attr('id', id);
                }, 1);
            });

It removes "name" and "id" attributes from elements and assigns them back after 1ms.

三人与歌 2024-08-22 13:35:39

向 html input 元素添加 autocomplete=off 属性应该可以做到这一点。

Adding an autocomplete=off attribute to the html input element should do that.

早乙女 2024-08-22 13:35:39

AutoCompleteType="Disabled" 添加到文本框

Add the AutoCompleteType="Disabled" to your textbox

无尽的现实 2024-08-22 13:35:39

这应该适用于每个浏览器

    <script type="text/javascript">
        var c = document.getElementById("<%=TextBox1.ClientID %>");
        c.select =
        function (event, ui) 
        { this.value = ""; return false; }
    </script>

This should work in every browser

    <script type="text/javascript">
        var c = document.getElementById("<%=TextBox1.ClientID %>");
        c.select =
        function (event, ui) 
        { this.value = ""; return false; }
    </script>
差↓一点笑了 2024-08-22 13:35:39

我已经在 Edge 和 Firefox 中成功测试了这一点。

<input type="text" id="cc" name="cc" autocomplete="off">

适用于常规文本输入。

对于密码,您需要使用 autocomplete="new-password"

<input type="password" id="cc1" name="cc" autocomplete="new-password">

per Mozilla 开发网络

I have successfully tested this in Edge and Firefox.

<input type="text" id="cc" name="cc" autocomplete="off">

works for regular text input.

For passwords, you need to use autocomplete="new-password"

<input type="password" id="cc1" name="cc" autocomplete="new-password">

per Mozilla Development Network

昨迟人 2024-08-22 13:35:39

我的解决方法是使密码字段成为普通文本框,然后使用 jquery 将其转换为焦点密码字段:

<asp:TextBox runat="server" ID="txtUsername" />
<asp:TextBox runat="server" ID="txtPassword" />
<script>
    $("#txtPassword").focus(function () {
        $("#txtPassword").prop('type', 'password');
    });
</script>

My workaround is to make the password field a normal textbox, then using jquery to turn it into password field on focus:

<asp:TextBox runat="server" ID="txtUsername" />
<asp:TextBox runat="server" ID="txtPassword" />
<script>
    $("#txtPassword").focus(function () {
        $("#txtPassword").prop('type', 'password');
    });
</script>
自此以后,行同陌路 2024-08-22 13:35:39
Place below code above your username control. This will work in call the browser.

<div style="margin-left:-99999px; height:0px;width:0px;">
<input type="text" id="cc" name="cc" autocomplete="off">
<input type="password" id="cc1" name="cc" autocomplete="off">
</div>

Place below code above your username control. This will work in call the browser.

<div style="margin-left:-99999px; height:0px;width:0px;">
<input type="text" id="cc" name="cc" autocomplete="off">
<input type="password" id="cc1" name="cc" autocomplete="off">
</div>

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文