禁用Firefox的自动填充

jee*_*ef3 21 html firefox

是否可以在不禁用自动完成的情况下禁用Firefox的自动填充功能?

我知道我可以这样做:

autocomplete="off"
Run Code Online (Sandbox Code Playgroud)

但我不想禁用自动完成,只需自动填充.

Firefox填充了一些我们隐藏的字段,这些字段是空的

当用户刷新页面时,这通常是一个问题.表单字段将使用预刷新的值重新填充.这是一个问题的一个例子是老派的占位符.我们使用值填充字段的位置,并在提交时将其删除.该值在刷新时重新填充,我们不知道它是占位符还是使用值.

小智 10

在实际用户名字段和实际密码字段之间放置两个虚拟字段对我有用,例如:

<input name = "Username" type="text" autocomplete="off">
<input name = "DummyUsername" type="text" style="display:none;">
<input name = "DummyPassword" type="password" style="display:none;">
<input name = "Password" type="password" autocomplete="new-password">
Run Code Online (Sandbox Code Playgroud)

这阻止了用户名的自动填充以及密码的自动填充.

autocomplete ="new-password"显然没有完全实现,但可以帮助一些浏览器.我怀疑它对FireFox有帮助,但是如果该功能被更广泛采用,它将用于未来的版本.


Mik*_*ike 8

如果问题是FF在用户刷新时填充字段,这实际上是Firefox的一个功能,试图在意外刷新的情况下帮助用户,这样他们就不会丢失他们输入的内容.我不认为你可以用HTML覆盖它.您可以使用JavaScript清除/重置页面加载时的所有相关表单值.如果表单上的form.reset()不起作用,则必须遍历表单元素并清除它们,如下所示:

for (i = 0; i < frm_elements.length; i++)
{
    field_type = frm_elements[i].type.toLowerCase();
    switch (field_type)
    {
    case "text":
    case "password":
    case "textarea":
    case "hidden":
        frm_elements[i].value = "";
        break;
    case "radio":
    case "checkbox":
        if (frm_elements[i].checked)
        {
            frm_elements[i].checked = false;
        }
        break;
    case "select-one":
    case "select-multi":
        frm_elements[i].selectedIndex = -1;
        break;
    default:
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)