【发布时间】:2015-11-24 04:27:31
【问题描述】:
我查看了posts 中的number,所有这些都指向了使用自动完成属性的不同方式,但我还没有在我的所有浏览器中进行这项工作。我见过一些非常丑陋的变通方法,例如 this,但我正在寻找一种干净且简单的方法。
在所有(或至少,大多数)常见浏览器上禁用文本字段自动填充的好方法是什么?
【问题讨论】:
标签: html google-chrome internet-explorer firefox autocomplete
我查看了posts 中的number,所有这些都指向了使用自动完成属性的不同方式,但我还没有在我的所有浏览器中进行这项工作。我见过一些非常丑陋的变通方法,例如 this,但我正在寻找一种干净且简单的方法。
在所有(或至少,大多数)常见浏览器上禁用文本字段自动填充的好方法是什么?
【问题讨论】:
标签: html google-chrome internet-explorer firefox autocomplete
以下代码将禁用 FF、IE 和 Chrome 中的自动完成功能。
<script>
$(document).ready(function () {
// IE & FF
$('input').attr('autocomplete', 'off');
// Chrome
if ( $.browser.webkit ) {
$('input').attr('autocomplete', 'new-password');
}});
</script>
【讨论】:
在表单和输入字段(使用“off”值)上启用自动完成功能,以便那些遵守规则的守法浏览器始终是一个好的开始 - 也适用于有一天“其他”这种不太可能发生的事件“浏览器……可能会觉得合规性并不全是坏事。
在那一天之前需要破解。我注意到 Chrome 至少在三个地方寻找匹配的数据:标签(上下文)、名称和占位符。如果输入字段中缺少名称字段,它将在标签和占位符中查找,但如果名称字段存在,它将仅在名称和占位符中查找。
此脚本在必须防止自动完成的输入字段上使用 Bootstrap 中的“表单控制”类。使用您喜欢的任何其他类或过滤器。还假设占位符正在使用中 - 如果没有,只需删除该部分。
$(document).ready(function() {
// Begin
var this_obj = null, this_placeholder = null, this_name = null;
$(".form-control").focus(function() {
this_obj = this;
this_name = $(this).prop("name");
this_placeholder = $(this).attr("placeholder");
$(this).prop("name", "NaN" + Math.random());
$(this).attr("placeholder", "...");
}).blur(function() {
$(this_obj).prop("name", this_name);
$(This_obj).attr("placeholder", this_placeholder);
});
// End
});
注意:将占位符留空实际上可能会无意中触发自动完成功能,因为空分配显然会被忽略。
this_name 和 this_placeholder 这两个变量可以避免,因为它们可以通过 this_obj 访问,但为了可读性和清晰性,我喜欢保留它们。
脚本是 erm.. 相当不显眼,因为它会自行清理,并且只需要一个匹配的类或属性。
它适用于版本 68.0.3440.106(官方版本)(64 位)、IE11 11.228.17134.0 和 Firefox 61.0.2(64 位)。抱歉,没有测试过其他人。
【讨论】:
为所有输入标签添加一个类,假设no-complete
并在你的 js 文件中添加以下代码:
setTimeout(function (){
$('.no-complete').val ("");
},1);
【讨论】: