Firefox ignoruje wybraną opcję = „wybrana”


112

Jeśli zmienisz listę rozwijaną i odświeżysz stronę, Firefox wydaje się ignorować wybrany atrybut.

<option selected="selected" value="Test">Test</option>

W rzeczywistości wybierze opcję, którą wcześniej wybrałeś (przed odświeżeniem). To kończy się dla mnie problemem, ponieważ w menu jest wyzwalane zdarzenie, które zmienia inne rzeczy. Czy istnieje sposób, aby Firefox zatrzymał to zachowanie (inny niż wywołanie innego zdarzenia podczas ładowania strony)?


Teraz mam do czynienia z tym problemem i naprawiam go za pomocą$('option:selected').each(function(){ $(this).prop('selected',true); });
plonknimbuzz

Zauważyłem, że dzieje się tak tylko w przypadku wybrania elementów, które nie mają atrybutu nazwy
Tlacaelel Ramon Luis

3
try autocomplete = "off"
hemanjosko

Odpowiedzi:


5

AFAIK, to zachowanie jest na stałe zakodowane w Firefoksie.

Możesz spróbować ustawić każdy element formularza na jego defaultValueładowanie podczas ładowania strony.


1
Czy łatwo było to zrobić dla wszystkich elementów w formularzu?
klucz-małpka

@monkey przy użyciu jQuery, powinno to być coś w stylu $(":input").val(this[0].defaultValue);(nieprzetestowane); w normalnym JS, przejdź przez każdydocument.getElementsByTagname("select")
Pekka

Chociaż może nie jest to idealne rozwiązanie, to działa ... musisz sprawdzić getAttribute ("wybrane")
monkey-wrench

8
FYI - Jest znacznie lepsza odpowiedź poniżej przez Marco Demaio
jonlink

282

Dodaj autocomplete="off"atrybut HTML do każdego zaznaczonego tagu. (źródło: https://stackoverflow.com/a/8258154/260080 )

Naprawia to zachowanie ODD w FireFox.


7
To moje preferencje (wielkie dzięki Marco i małpce, zaoszczędziłem tam kilka kępek włosów). Będziesz także musiał dodać go do każdego elementu <input> z atrybutem „value” lub „check”, a także z dowolnym elementem <textarea> z zawartością.
Swanny

22
To zdecydowanie powinna być prawidłowa odpowiedź. Działa jak marzenie.
Andrew Senner

1
to nie jest w3c ważne
Jose De Gouveia

1
Miałem ten sam problem w systemie Windows, Firefox w wersji 44.0 (2016-styczeń). I to rozwiązanie nadal działa.
Steven

1
Działa jak urok w przeglądarce Firefox 47.0.
Blackecho

72

W Firefoksie zauważyłem, że atrybut „selected” nie będzie działał, dopóki nie umieścisz zaznaczenia wewnątrz formularza, gdzie formularz ma atrybut nazwy.


3
BAM! To naprawiło problem, gdzie autocomplete = "off" nie.
little_birdie

Spędziłem godzinę drapiąc się po głowie w przeglądarce Firefox 78.0.2. Nie potrzebowałem nazwiska na moim formularzu, ale nadanie mu jednego przyniosło ulgę.
betakilo

11

Po prostu miałem ten sam problem, uwierz mi, że minęło ponad 10 godzin zmagania się z tym głupim zachowaniem Firefoksa, mam 7 rozwijanych menu, każdy z nich wyzwoli zdarzenie i wypełni 24 ukryte dane wejściowe, więc możesz sobie wyobrazić wybranie odpowiedniej opcji 24 błędne wartości wejściowe !!! rozwiązaniem, które w końcu znalazłem, jest zresetowanie formularza za pomocą JavaScript, dodając następujący wiersz kodu:

window.onload = function() { document.forms['MarkerForm'].reset(); };

PS: dane wejściowe mają wartości pobrane z bazy danych, więc zresetowanie formularza nie powoduje opróżnienia żadnej wartości, ale w pewnym sensie nakazuje firefoxowi wrócić do diabła do opcji selected = selected!


To jest poprawna odpowiedź. Odpowiedzi mówiące o używaniu „autouzupełniania” na wybranym elemencie są błędne, ponieważ „autouzupełnianie” NIE jest prawidłowym atrybutem dla pola wyboru zgodnie z W3 i spowoduje, że „autouzupełnianie atrybutu nie jest dozwolone przy wyborze elementu w tym momencie”. błędy przy walidacji.
Scott,


5

Spróbuj wyłączyć autocompleteatrybut wyboru wejścia ... czasami przeglądarka ignoruje selectz tego powodu


3

Używam FF 25.0.1

Ignoruje selected=""i selected="selected".

Ale jeśli po prostu spróbuję, selectedopcja jest zaznaczona.

Dziwne (niezgodne) zachowanie. Wiem, że selectedjest to poprawny HTML5 i jest to najkrótsza forma, ale zwykle piszę kod, który również waliduje, podobnie jak dobrze sformatowany XML, więc mogę użyć dowolnego narzędzia walidacji XML, aby sprawdzić moje wyniki w bardzo ścisły sposób (a wymiana danych jest bardzo łatwa. .)

Według W3C te warianty powinny obowiązywać dla atrybutów logicznych:

HTML5:  boolAttr="" | boolAttr="boolAttr" | boolAttr
XHTML5: boolAttr="" | boolAttr="boolAttr"

Wolę pierwszy, ponieważ jest prawie tak krótki, jak ostatni (niezgodny z XML) wariant, ale powinien sprawdzać się zarówno jako XHTML5, jak i HTML5. Mam więc nadzieję, że Mozilla to naprawi!


3

użyj .prop () zamiast .attr ()

This does not work in firefox.
  $( 'option[value="myVal"]' ).attr( 'selected', 'selected' );
use this one
  $( 'option[value="myVal"]' ).prop( 'selected', 'selected' );

In other way
  $( this ).prop( 'selected', 'selected' );

Użycie .prop('selected', true);lub .prop('selected', false);(jQuery) do włączania / wyłączania działa zarówno w przeglądarce Firefox, jak i Chrome.
JimB

2

Możesz wywołać .reset()formularz przed odświeżeniem strony.


2

ująć wybierz w atrybut formularza i zadziała.

<!-- will not work in firefox -->
<option selected="selected" value="Test">Test</option>

i

<!-- this will work in firefox -->
<form>
 <option selected="selected" value="Test">Test</option>
</form>

2

Z nazwą jest lepiej = >>

form id="UMForm" name="UMForm" class="form"

Zaznaczenie przyjmie wybrany atrybut



1

autouzupełnianie też nie działało.

Oto poprawka javscript napisana w jQuery, której używam:

$('input[type="radio"][selected]').click();

1
<option selected="selected" value="Test">Test</option>

W tym przypadku działało to zarówno w przeglądarce Chrome, jak i Firefox.

$('option[value="Test"]').prop('selected', true);

Używałem .attr()zamiast.prop()


1

Aby wyświetlić pierwszą pozycję z menu, użyj ProjectName.ClearSelection();

Umieść linie na swojej stronie projektu, aby działały we wszystkich przeglądarkach. Umieść to również w kodzie za ładowaniem strony.

$(document).ready(function () {
    $("#content_ProjectName option[value='1']").prop("selected", true);
});

0

Jeśli zmienisz zaznaczenie i odświeżysz stronę, firefox przywróci zmiany w formularzu, dlatego masz wrażenie, że zaznaczanie nie działa. Zamiast odświeżać, spróbuj otworzyć link w nowej karcie.


To prawda, ale nie wydaje się, aby rozwiązać mój problem. Nadal potrzebuję obejścia, ponieważ moje zdarzenie onchange nie jest uruchamiane, gdy Firefox przywraca jakiekolwiek zmiany w formularzu po odświeżeniu.
małpa-klucz

0

To jest moje rozwiązanie:

var select = document.getElementById('my_select');
for(var i=0; i < select.options.length; i++){
    select.options[i].selected = select.options[i].attributes.selected != undefined;
}

Po prostu umieściłem to na górze strony (z odpowiednim ustawionym identyfikatorem) i to działa. Zastąpienie getElementById pętlą nad wszystkimi zaznaczeniami na stronie zostawiam jako ćwiczenie dla czytelnika;).


0

U mnie żadne z powyższych rozwiązań nie zadziałało. Musiałem wyraźnie ustawić wybór, jeśli żaden nie został ustawiony:

if (foo.find(':selected').length === 0) {
    $(foo.find('option')[0]).attr('selected', 'selected');
}

Chciałbym, żeby Firefox to naprawił :(


0

W pracy właśnie naprawiłem błąd polegający na tym, że opcja zaznaczania pola wyświetlała się poprawnie w przeglądarce Chrome, ale nie w przeglądarce Firefox na tej samej stronie internetowej. Okazało się, że to coś zupełnie innego niż powyższe problemy, ale może to być problem, którego doświadczasz.

W przeglądarce Chrome kolor czcionki w polu wyboru był czarny. Z jakiegoś powodu w przeglądarce Firefox pole wyboru odziedziczyło kolor czcionki z kontenera, który był biały. Gdy dodałem regułę CSS, aby wymusić, że kolor czcionki w polu wyboru będzie czarny, zestaw wartości był poprawnie wyświetlany.


0

Ani autocomplete="off"umieszczenie go w środku, nie formdziała dla mnie.

Co pracował było użyć tylko wybranego atrybutu bez „wartości” jak poniżej:

<option @(Model.Source == TermSource.Instagram ? "selected" : "")>
    Instagram
</option>
<option @(Model.Source == TermSource.Facebook ? "selected" : "")>
    Facebook
</option>

więc albo renderuje <option selected>...</option>, albo po prostu<option>...</option>

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.