2011-11-02 21 views
5

Trong Firefox 7.0.1, tôi có hai hộp kiểm và một số đầu vào khác.Firefox ghi nhớ các nút radio không chính xác

Khi tôi thêm một đầu vào khác thông qua jQuery Firefox không ghi nhớ chính xác đầu vào radio nào được chọn.

Ví dụ: nếu tôi chọn nút radio đầu tiên và sau đó làm mới trang, nút radio thứ hai được chọn thay vì nút radio đầu tiên và nếu tôi làm mới lại thì không có nút radio nào được chọn.

Bạn sẽ có thể sao chép và dán đoạn mã dưới đây vào một tập tin mới để thử nghiệm cho mình:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script> 
    <script> 
    $(document).ready(function(){ 
    $('select').after('<input class="select" type="text" name="new_text_input" />'); 
}); 
    </script> 
    <title>Pretty jQuery Form</title> 
</head> 
<body> 
<form> 
    <fieldset> 
     <label>Select Box</label> 
     <select name="my_select"> 
      <option>Option 1</option> 
      <option>Option 2</option> 
      <option>Option 3</option> 
      <option>Option 4</option> 
     </select> 
    </fieldset> 
    <fieldset> 
     <label>Text Input</label> 
     <input class="text" id="text_input" name="input" type="text" /> 
    </fieldset> 
    <fieldset> 
     <label>Text Area</label> 
     <textarea></textarea> 
    </fieldset> 
    <fieldset> 
     <label>Radio</label> 
     <input value="1" name="radio" id="radio1" type="radio" /> <label for="radio1">Radio 1</label> 
     <input value="2" name="radio" id="radio2" type="radio" /> <label for="radio2">Radio 2</label> 
    </fieldset> 
</form> 
</body> 
</html> 

Tôi nên lưu ý rằng những gì tôi đang thực sự cố gắng làm là phức tạp hơn nhưng sau nhiều giờ gỡ lỗi tôi đã quản lý để thu hẹp nó xuống này.

+0

Bạn có nghĩa là sau khi bạn gửi biểu mẫu hoặc chỉ làm mới trang? Tôi không nghĩ rằng bất kỳ trình duyệt nào chính thức yêu cầu ghi nhớ dữ liệu nhập của người dùng nếu họ chỉ làm mới trước khi điền vào biểu mẫu và gửi. –

+0

Tôi có cảm giác rằng Firefox có hoặc ít nhất cũng được sử dụng. Tuy nhiên vẫn còn một vấn đề ở đây với cách các nút radio khác nhau đang được kiểm tra trên mỗi lần làm mới. – robjbrain

+0

Bởi chính thức tôi có nghĩa là do tính linh hoạt của DOM thông qua JS các chỉ số dự kiến ​​có thể không có mặt và nó còn lại để giải thích. Có khả năng bộ nhớ của nó được gọi là dựa trên một vị trí số cơ bản trong dom và vì sự chèn vào bất ngờ này, nó đang áp dụng sai nó. Vì vậy, đối với bạn, nó có thể là cần thiết để đi xa như vậy để thiết lập một cookie js có chứa tình trạng hình thức dự kiến ​​của bạn và áp dụng đó trong cuộc gọi document.ready của bạn. –

Trả lời

14

Có một bài viết về vấn đề này: http://www.ryancramer.com/journal/entries/radio_buttons_firefox/

Các lỗi lần đầu tiên được báo cáo lăm năm trước: https://bugzilla.mozilla.org/show_bug.cgi?id=394782

giải pháp:

<form autocomplete="off"> 

Hoặc sử dụng jQuery:

$(document).ready(function() { 
    if ($.browser.mozilla) $("form").attr("autocomplete", "off"); 
}); 

Nó cũng có thể để ngăn chặn vấn đề bằng cách chỉ đặt autocomplete = "off" trên các nút radio mình (cách này bạn vẫn có thể nhận autocomplete cho các trường mẫu khác).

+2

Tôi vừa gặp sự cố này với một nhóm nút radio và Firefox chọn nút đầu tiên mặc dù nút radio thứ ba có thuộc tính 'đã kiểm tra'. Chrome và IE hiển thị chính xác nút thứ ba như được chọn. Tôi đã thêm "autocomplete =" off "" được đề xuất vào mỗi nút radio trong nhóm và bây giờ Firefox hiển thị đúng nút radio thứ ba được chọn. – toyNN

0

Dường như không có phản ứng đối với vấn đề này, tôi vẫn cho rằng đó là một lỗi trong Firefox, nhưng tôi lại không có sửa chữa

+0

Tôi đã đăng bản sửa lỗi hoạt động cho Firefox 38.0.5: http: // stackoverflow.com/questions/7876384/radio-boxes-not-resetting-to-checked-status-in-firefox/30946161 # 30946161 Đó là một lỗi hơi khác với giá trị mặc định không kiểm tra, nhưng nó đảm bảo trang tải giá trị mặc định (hoặc giá trị được lưu bên máy chủ được lưu) khi trang được tải. –

1

Các đầu vào đài phát thanh rằng nên được kiểm tra giữ thuộc tính checked="checked", vì vậy tìm kiếm cho rằng yếu tố đầu vào và tự kiểm tra nó cố định vấn đề này cho tôi:

$('input[type="radio"][checked="checked"]').prop('checked', true);