2011-06-27 102 views
17

是否可以禁用Firefox的自動填充功能而不禁用自動填寫?禁用Firefox的自動填充

我知道我能做到這一點:

autocomplete="off" 

但我不希望禁用自動完成,只是自動填充。

Firefox是填充了一些這意味着可以爲空

這主要是一個問題,當用戶刷新頁面我們的隱藏字段。表單字段將使用預刷新中的值重新填充。這是一個問題的例子是老派的地方。我們在哪裏填充值,並在提交時將其刪除。該值在刷新時重新填充,我們不知道它是否是佔位符或使用價值。

+0

這可能只是一個FF錯誤? – jeef3

+0

這裏是其他解決方案http://stackoverflow.com/questions/25019160/disable-browsers-form-inputs-prefill-autofill-feature-when-hitting-back-button –

+0

而問題是FF也設置用戶名,或猜測用戶名是前一個字段,通常是完全不同的東西! (我在版本56) – Savage

回答

4

如果問題是,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; 
    } 
} 
+0

我認爲這是一個非常接近我回答的答案。我想知道我們是否也可以將其掛鉤到window.unload中。 – jeef3

2

Firefox只在窗體上授予autocomplete="off",而不是個別元素(與IE不同)。

另一種方法是將字段名稱更改爲奇怪的東西,例如name="_u_sern_ame",以便混淆任何字段識別系統,如果您想禁用某些細節的自動填充功能。

+2

謝謝,但Firefox似乎緩存舊值,不管名稱如何。在一個網絡應用程序中,這非常痛苦。 – jeef3

+0

我試圖改變字段名稱來完成像「alpha」,「beta」,「gamma」這樣的安慰劑,但它沒有幫助。 Firefox仍會自動填寫密碼。 – Nayuki

+0

是的,我認爲它的輸入類型是「password」,而不是名稱 – Savage

1

This後建議使用(其他)虛擬領域將被自動填充,你可以隱藏這些與CSS。但是這可能會比其他密碼字段更好地工作。

+0

是的,它看起來像這樣會工作,但問題(對我來說)比僅僅用戶名/密碼字段更寬。 – jeef3

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 == ""; 
    } 
} 
+0

如果刷新頁面,這實際上是一個問題。所以,我們有一個輸入,隱藏或以其他方式通過javascript填充值。如果用戶刷新該頁面,則該輸入由Firefox預填充值重新填充。所以當提交最終發生時,我們不知道用戶是否放在那裏或Firefox。 – jeef3

2

我有這個問題我自己。 Mike的回答很接近,但我認爲這並不完美:即使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選擇input s和select s,然後迭代它們並用iterated元素替換this
請使用.getElementsByTagName('option')來選擇選項。

+0

沒有足夠的jquery :) –

3

我對頁面上的表單中的密碼字段有類似的問題。

如果在頁面火狐只是自動填充密碼上的表單標籤類型的輸入標籤=密碼:

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

這是我用來解決這個具體問題的代碼:

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

這個工作之前,但Firefox自動填充的東西,即使當'autocomplete =「off」'出現在窗體中已經得到了stupidierer!我最近發現我不得不把它放在$(window).load(function(){$('input [type = password]')。val('');});'中。 '$(document).ready()'還爲時過早,因爲表單在稍微延遲後才填滿。 – billynoah

1

autocomplete='off'不會阻止無論是在輸入或形式 把

<input type='password' style='display: none;' /> 

之前你真正的密碼輸入。

3

把兩個虛擬領域中的實際用戶名字段和實際密碼字段之間的工作對我來說,例如:

<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"> 

這阻止了用戶名的自動填充,以及密碼的自動填充。

autocomplete =「新密碼」顯然沒有完全實現,但可以幫助一些瀏覽器。我懷疑它是否對FireFox有幫助,但在未來的版本中可以使用,以便更廣泛地採用該功能。

+0

確認工作。它爲什麼有效?順便說一句,我沒有像你那樣把假土地夾在中間。無論如何,我更喜歡通過JS方法來清除頁面呈現中的表單......這會冒着一瞬間的內容,用戶看到表單被填滿一會兒然後被清除......一些偏執和/或天真的用戶wouldn不喜歡那樣。 – MarsAndBack

+0

重新上限:此方法似乎禁用自動填充並保持自動填充。 – MarsAndBack

1

這實際上與密碼字段在Firefox:

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

什麼工作對我來說是

autocomplete="new-password"