2011-06-27 44 views
17

Có thể tắt tính năng tự động điền của Firefox tự động điền mà không tắt tự động hoàn tất không?Tắt tính năng Tự động điền của Firefox

Tôi biết tôi có thể làm điều này:

autocomplete="off" 

Nhưng tôi không muốn vô hiệu hóa tính năng tự động hoàn chỉnh, chỉ là tự động điền.

Firefox được Populating một số lĩnh vực của chúng tôi ẩn đó có nghĩa là để được sản phẩm nào

này chủ yếu là một vấn đề khi người dùng làm mới trang. Các trường biểu mẫu được điền lại với các giá trị từ làm mới trước. Một ví dụ về vấn đề này là một người giữ chỗ ở trường học cũ. Nơi chúng tôi điền trường bằng một giá trị và xóa trường đó khi gửi. Giá trị được điền lại khi làm mới và chúng tôi không biết đó có phải là giá trị địa điểm hoặc giá trị sử dụng hay không.

+0

Đây có phải chỉ là lỗi FF không? – jeef3

+0

Dưới đây là các giải pháp khác http://stackoverflow.com/questions/25019160/disable-browsers-form-inputs-prefill-autofill-feature-when-hitting-back-button –

+0

Và vấn đề là FF cũng đặt tên người dùng hoặc đoán rằng tên người dùng là trường trước, thường là cái gì đó hoàn toàn khác! (Tôi đang sử dụng phiên bản 56) – Savage

Trả lời

4

Nếu vấn đề là FF được Populating các lĩnh vực khi làm mới dùng, điều này thực sự là một tính năng của Firefox để cố gắng giúp đỡ các người dùng trong trường hợp làm mới tình cờ để họ không bị mất bất cứ điều gì họ đã gõ. Tôi không nghĩ bạn có thể ghi đè điều này bằng HTML. Bạn có thể sử dụng JavaScript để xóa/đặt lại tất cả các giá trị biểu mẫu có liên quan khi tải trang. Nếu form.reset() trên biểu mẫu không hoạt động, bạn sẽ phải lặp qua các phần tử biểu mẫu và xóa chúng như sau:

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

Tôi nghĩ rằng đây là một câu trả lời khá gần với những gì tôi sau.Tôi tự hỏi nếu chúng ta cũng có thể móc này vào window.unload. – jeef3

2

Firefox chỉ vinh danh autocomplete="off" trên biểu mẫu chứ không phải các thành phần riêng lẻ (không giống như IE).

Một tùy chọn khác là thay đổi tên trường thành những thứ lạ như name="_u_sern_ame" để gây nhầm lẫn cho bất kỳ hệ thống nhận dạng trường nào nếu bạn muốn vô hiệu hóa tính năng tự động điền của một số chi tiết.

+2

Cảm ơn, nhưng Firefox dường như đang lưu vào bộ nhớ cache các giá trị cũ, bất kể tên. Trong một ứng dụng web, điều này khá là đau. – jeef3

+0

Tôi đã thử thay đổi tên trường để hoàn thành giả dược như "alpha", "beta", "gamma", nhưng nó không giúp ích gì. Firefox vẫn tự động điền mật khẩu. – Nayuki

+0

Vâng, tôi nghĩ rằng nó làm việc ra các loại đầu vào "mật khẩu", chứ không phải là tên – Savage

1

This bài đăng đề xuất sử dụng các trường giả khác (sẽ được tự động điền, bạn có thể ẩn những người có css. Nhưng điều này có lẽ sẽ hoạt động tốt hơn với các trường mật khẩu hơn các trường khác.

+0

Vâng, có vẻ như điều này sẽ hiệu quả, nhưng vấn đề (đối với tôi) là rộng hơn các trường tên người dùng/mật khẩu. – jeef3

0

Nếu đó thực sự là lỗi của Firefox, bạn có thể sử dụng sự kiện onSubmit để xóa các trường bị ẩn. Trong đoạn code có dạng:

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

Ví dụ chức năng Javascript:

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

Nó thực sự là một vấn đề nếu bạn làm mới trang. Vì vậy, chúng tôi có một đầu vào, ẩn hoặc nếu không đã được dân cư với một giá trị có thể thông qua javascript. Nếu người dùng làm mới trang, đầu vào đó được Firefox điền lại với giá trị làm mới trước. Vì vậy, khi gửi cuối cùng xảy ra, chúng tôi không biết nếu người dùng đặt nó ở đó hoặc Firefox đã làm. – jeef3

2

Tôi đã gặp sự cố này. Câu trả lời của Mike là gần gũi, nhưng không hoàn hảo theo ý kiến ​​của tôi: nó làm trống các phần tử, ngay cả khi thuộc tính value có thể muốn đặt nó.

Khi tải trang, tôi làm như sau. Nó chỉ sử dụng một jQuery nhỏ.

// 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; 
}); 


Không có jQuery?

Sử dụng document.getElementsByTagName để chọn input s và select s, sau đó lặp qua chúng và thay thế this bởi các yếu tố lặp.
Chọn các tùy chọn với .getElementsByTagName('option').

+0

Không đủ jquery :) –

3

Tôi đã gặp sự cố tương tự cho trường mật khẩu trong biểu mẫu trên trang.

Nếu có một thẻ input với type = mật khẩu trong một thẻ mẫu trên trang Firefox chỉ là tự động Populating mật khẩu:

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

Dưới đây là đoạn code tôi sử dụng để khắc phục vấn đề cụ thể này:

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

Điều này làm việc trước đây nhưng Firefox đã trở nên ngu ngốc hơn khi tự động điền mọi thứ ngay cả khi 'autocomplete =" off "' hiện diện trong một biểu mẫu! Gần đây tôi đã tìm thấy tôi đã phải kèm theo điều này trong '$ (window) .load (function() {$ ('input [type = password]'). Val ('');});'. '$ (document) .ready()' thậm chí còn quá sớm khi form được lấp đầy sau một chút chậm trễ. – billynoah

1

autocomplete='off' sẽ không ngăn cản cho dù trong đầu vào hoặc hình thức đặt một

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

trước khi nhập mật khẩu thực của bạn.

3

Đưa hai lĩnh vực giả ở giữa các lĩnh vực tên thực tế và trường mật khẩu thực tế làm việc cho tôi, ví dụ .:

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

này ngăn cản việc tự động điền tên người dùng, cũng như tự động điền mật khẩu.

autocomplete = "new-password" dường như không được triển khai đầy đủ, nhưng có thể trợ giúp với một số trình duyệt. Tôi nghi ngờ rằng nó là hữu ích với FireFox, nhưng nó là có cho các phiên bản trong tương lai trong trường hợp tính năng được áp dụng rộng rãi hơn.

+0

Xác nhận công việc. Tại sao nó hoạt động? BTW Tôi đã không kẹp các lĩnh vực giả như bạn đã làm. Dù sao, tôi thích điều này hơn JS phương pháp rõ ràng các hình thức trên trang render ... có nguy cơ một flash của nội dung mà người dùng nhìn thấy hình thức được lấp đầy cho một thời điểm và sau đó được xóa ... một số người dùng hoang tưởng và/hoặc ngây thơ sẽ không thích điều đó. – MarsAndBack

+0

Để giới hạn lại: phương pháp này dường như tắt tự động điền và giữ tự động hoàn tất. – MarsAndBack

1

Điều này thực sự làm việc với một trường mật khẩu trong FireFox:

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

những gì làm việc cho tôi là

autocomplete="new-password" 
0

Trong một số trường hợp, trình duyệt sẽ tiếp tục cho thấy giá trị autocompletion thậm chí nếu thuộc tính autocomplete là đặt thành tắt. Hành vi bất ngờ này có thể khá khó hiểu đối với các nhà phát triển. Bí quyết để thực sự buộc không autocompletion là gán một chuỗi ngẫu nhiên vào thuộc tính, ví dụ:

autocomplete="nope" 

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

Cố gắng trong các trình duyệt lớn và nó hoạt động!

Các vấn đề liên quan