2011-11-02 11 views
5

W Firefoksie 7.0.1 mam dwa pola wyboru i kilka innych danych wejściowych.Firefox pamięta niepoprawnie przyciski radiowe

Kiedy dodaję kolejne wejście przez jQuery, Firefox nie zapamiętuje dokładnie, jakie wejścia radiowe są wybierane.

Na przykład, jeśli wybiorę pierwszy przycisk radiowy, a następnie odświeżysz stronę, zostanie wybrany drugi przycisk radiowy zamiast pierwszego, a po odświeżeniu nie zostanie wybrany żaden przycisk radiowy.

Powinieneś być w stanie skopiować i wkleić poniższy kod do nowego pliku, aby przetestować dla was:

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

Należy zauważyć, że co ja rzeczywiście staramy się robić to bardziej skomplikowane, ale po wielu godzinach debugowania udało mi się to ograniczyć.

+0

masz na myśli po wysłaniu formularza lub po prostu Odśwież stronę? Nie sądzę, aby jakakolwiek przeglądarka oficjalnie twierdziła, że ​​pamięta dane wprowadzone przez użytkownika, jeśli po prostu odświeży się przed wypełnieniem formularza i przesłaniem go. –

+0

Mam wrażenie, że Firefox działa, a przynajmniej używa go. Niemniej jednak nadal istnieje problem z tym, w jaki sposób różne przyciski są sprawdzane przy każdym odświeżeniu. – robjbrain

+0

Oficjalnie mam na myśli to, że biorąc pod uwagę plastyczność DOM przez JS, oczekiwane indeksy mogą nie występować i pozostawia się je interpretacji. Istnieje możliwość, że tak zwana pamięć jest oparta na podstawowej pozycji liczbowej w domenie i z powodu tego nieoczekiwanego wstawienia źle ją wykorzystuje. Tak więc dla ciebie może być konieczne, aby ustawić plik js zawierający oczekiwany status formularza i zastosować go w swoim dokumencie. –

Odpowiedz

14

Jest artykuł na ten temat: http://www.ryancramer.com/journal/entries/radio_buttons_firefox/

The bug została po raz pierwszy opisana pięć lat temu: https://bugzilla.mozilla.org/show_bug.cgi?id=394782

Rozwiązanie:

<form autocomplete="off"> 

lub przy użyciu jQuery:

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

Możliwe jest również, aby zapobiec problem tylko wprowadzenie autouzupełniania = „OFF” na przyciski radiowe sami (w ten sposób można jeszcze dostać autouzupełniania dla innych pól formularza).

+2

Po prostu wpadłem na ten problem z grupą przycisków radiowych i Firefox wybieraniem pierwszego, mimo że trzeci przycisk opcji "sprawdził". Chrome i IE wyświetlają prawidłowo trzeci przycisk. Dodałem sugerowany "autocomplete =" off "do każdego z przycisków radiowych w grupie, a teraz Firefox poprawnie pokazuje trzeci wybrany przycisk. – toyNN

0

Wydaje się, że nie ma odpowiedzi na ten problem, nadal zakładamy, że jest to błąd w Firefoksie, ale ja zostaję bez poprawki

+0

Napisałem poprawkę, która działała dla przeglądarki Firefox 38.0.5: http: // stackoverflow.com/questions/7876384/radio-box-nie-reset-do-sprawdzonego-statusu-w-firefox/30946161 # 30946161 To był nieco inny błąd, którego domyślna wartość nie sprawdzała się w ogóle, ale zapewnia strona ładuje wartość domyślną (lub zapisaną wartość po stronie serwera) po załadowaniu strony. –

1

Wejście radia, które powinny być sprawdzane trzyma atrybut checked="checked", więc szuka tego elementu wejściowego i ręcznie sprawdzając go naprawić ten problem dla mnie:

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

Powiązane problemy