禁用Firefox的自动填充

时间:2011-06-27 01:57:20

标签: html firefox

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

我知道我可以这样做:

autocomplete="off"

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

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

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

10 个答案:

答案 0 :(得分:7)

如果问题是当用户刷新时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;
    }
}

答案 1 :(得分:3)

Firefox仅在表单上尊重autocomplete="off",而不是单个元素(与IE不同)。

另一种选择是将字段名称更改为奇怪的内容,例如name="_u_sern_ame",以便在您要禁用某些内容详细信息的自动填充时混淆任何字段识别系统。

答案 2 :(得分:3)

我在页面上的表单中遇到了类似的密码字段问题。

如果页面上的表单标记中有type = password的输入标记,Firefox就会自动填充密码:

<form>
    <input type='password' />
</form>

以下是我用来修复此特定问题的代码:

$('input[type=password]').val('')

答案 3 :(得分:2)

我自己有这个问题。迈克的答案很接近,但在我看来并不完美:它会清空元素,即使value属性可能想要设置它。

在页面加载中,我执行以下操作。它只使用了一点点jQuery。

// Reset input elements to their HTML attributes (value, checked)
$("input").each(function(){
    // match checkbox and radiobox checked state with the attribute
    if((this.getAttribute('checked')==null) == this.checked)
        this.checked = !this.checked;
    // reset value for anything else
    else this.value = this.getAttribute('value')||'';
});

// Select the option that is set by the HTML attribute (selected)
$("select").each(function(){
    var opts = $("option",this), selected = 0;
    for(var i=0; i<opts.length; i++) 
        if(opts[i].getAttribute('selected')!==null) 
            selected = i;

    this.selectedIndex = selected||0;
}); 


没有jQuery?

使用document.getElementsByTagName选择inputselect,然后迭代它们并用迭代元素替换this
选择.getElementsByTagName('option')选项。

答案 4 :(得分:1)

This帖子建议使用(其他)虚拟字段进行自动填充,你可以隐藏那些用css。但是,对于密码字段,这可能比其他字段效果更好。

答案 5 :(得分:1)

autocomplete='off'不会阻止输入或表单 放一个

<input type='password' style='display: none;' />
在输入真实密码之前

答案 6 :(得分:1)

这实际上适用于FireFox中的密码字段:

$(window).load(function(){
    $('#pass').val('');
});

答案 7 :(得分:1)

在某些情况下,即使autocomplete属性设置为off,浏览器也会继续建议自动完成值。对于开发人员来说,这种意想不到的行为非常令人费解真正强制非自动完成的技巧是为属性分配一个随机字符串,例如:

C:\wamp64\bin\apache\apache2.4.23\bin>httpd -t
Syntax OK

https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion

在主流浏览器中尝试过并且有效!

答案 8 :(得分:0)

如果确实是Firefox错误,您可以使用onSubmit事件清除隐藏字段。在表单代码中:

<form onSubmit="clearFieldsIfPopulated(this)">
  <input type="hidden" name="field1"> <input type="submit">
</form>

示例Javascript函数:

function clearFieldsIfPopulated(form) {
  if (form.field1.value != "") {
    form.field1.value == "";
  }
}

答案 9 :(得分:0)

对我有用的是

autocomplete="new-password"