Firefox ignora l'opzione selezionata = "selezionata"


112

Se modifichi un menu a discesa e aggiorni la pagina, Firefox sembra ignorare l'attributo selezionato.

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

Infatti selezionerà l'opzione che avevate precedentemente selezionato (prima dell'aggiornamento). Questo finisce per essere un problema per me poiché c'è un evento attivato nel menu a discesa che cambia altre cose. C'è un modo per fare in modo che Firefox interrompa questo comportamento (diverso dall'attivare un altro evento quando la pagina viene caricata)?


$('option:selected').each(function(){ $(this).prop('selected',true); });
Affronto

Ho notato che questo accade solo per selezionare elementi privi di un attributo nome
Tlacaelel Ramon Luis

3
prova autocomplete = "off"
hemanjosko

Risposte:


5

AFAIK, questo comportamento è hard-coded in Firefox.

Potresti provare a impostare ogni elemento del modulo defaultValuesul caricamento della pagina.


1
È stato facile farlo per tutti gli elementi all'interno del modulo?
chiave inglese

@monkey usando jQuery, dovrebbe essere qualcosa come $(":input").val(this[0].defaultValue);(non testato); in JS normale, cammina comunque ciascunodocument.getElementsByTagname("select")
Pekka

Anche se forse non è la soluzione ideale, funziona .. devi controllare getAttribute ("selected")
monkey-wrench

8
Cordiali saluti - C'è una risposta molto migliore di seguito di Marco Demaio
jonlink

281

Aggiungi l' autocomplete="off"attributo HTML a ogni tag di selezione. (fonte: https://stackoverflow.com/a/8258154/260080 )

Questo risolve il comportamento ODD in FireFox.


7
Questa è la mia preferenza (grazie mille Marco e chiave inglese, mi hanno salvato qualche ciuffo di capelli lì). E dovrai anche aggiungerlo a ogni <input> con un attributo "value" o "controllato" e qualsiasi <textarea> con contenuto.
Swanny

22
Questa dovrebbe essere sicuramente la risposta corretta. Funziona come un fascino.
Andrew Senner

1
questo non è un w3c valido
Jose De Gouveia

1
Ho avuto lo stesso problema su Windows, Firefox ver 44.0 (2016-Jan). E questa soluzione funziona ancora.
Steven

1
Funziona a meraviglia su Firefox 47.0.
Blackecho

72

In Firefox, ho notato che l'attributo "selected" non funzionerà a meno che non si inserisca la selezione all'interno di un modulo, dove il modulo ha un attributo nome.


3
BAM! Questo lo ha risolto dove autocomplete = "off" no.
little_birdie

Ho passato un'ora a grattarmi la testa con Firefox 78.0.2. Non avevo bisogno di un nome sul mio modulo, ma dargliene uno ha dato sollievo.
betakilo

11

Ho appena avuto lo stesso problema, credimi sono state più di 10 ore a lottare con questo stupido comportamento di Firefox, ho 7 menu a discesa, ognuno di essi attiverà un evento e riempirà 24 input nascosti, quindi puoi immaginare di avere l'opzione giusta selezionata con 24 valori di input errati !!! la soluzione che ho finalmente trovato è reimpostare il modulo con Javascript aggiungendo questa riga di codice:

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

PS: gli input hanno i valori estratti da un database, quindi reimpostare il modulo non svuota alcun valore ma in un certo senso dice a firefox di tornare all'inferno all'opzione selected = selected!


Questa è la risposta corretta. Le risposte che dicono di utilizzare "completamento automatico" su un elemento di selezione sono sbagliate perché "completamento automatico" NON è un attributo valido per un campo di selezione secondo W3 e causerà "Completamento automatico degli attributi non consentito sulla selezione dell'elemento a questo punto". errori di convalida.
Scott


5

Prova a disabilitare l' autocompleteattributo di input di selezione ... a volte il browser ignora selectper questo motivo


3

Sto usando FF 25.0.1

Ignora selected=""e selected="selected".

Ma se provo semplicemente selectedl'opzione è selezionata.

Strano comportamento (non conforme). So che selectedè HTML5 valido ed è la forma più breve, ma di solito scrivo codice che convalida anche XML ben formato, in modo da poter utilizzare qualsiasi strumento di convalida XML per controllare i miei risultati in modo molto rigoroso (e lo scambio di dati è molto semplice .. .)

Secondo W3C, queste varianti dovrebbero essere valide sugli attributi booleani:

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

Preferisco la prima, poiché è quasi corta quanto l'ultima variante (non conforme a xml), ma dovrebbe essere convalidata sia come XHTML5 che come HTML5. Quindi spero che Mozilla lo risolva!


3

usa .prop () invece di .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' );

L'utilizzo di .prop('selected', true);o .prop('selected', false);(jQuery) per abilitare / disabilitare funziona sia per Firefox che per Chrome.
JimB

2

Puoi chiamare .reset()il modulo prima di aggiornare la pagina.


2

racchiudi seleziona nell'attributo del modulo e funzionerà.

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

e

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

2

Con il nome è meglio = >>

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

La selezione prenderà l'attributo selezionato


1

Forse è un bug in Mozilla, ma prova a dare un nome al menu a discesa.


1

il completamento automatico non funzionava neanche per me.

Questa è la correzione javscript scritta in jquery che uso:

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

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

In questo caso ha funzionato sia per Chrome che per Firefox.

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

Stavo usando .attr()invece di.prop()


1

Per mostrare il primo elemento dell'elenco a discesa, utilizzare ProjectName.ClearSelection();

Metti delle linee nella tua pagina di progettazione per funzionare su tutti i browser e inseriscile anche nel codice dietro al caricamento della pagina.

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

0

Se modifichi la selezione e aggiorni la pagina, Firefox ripristinerà le modifiche sul modulo, ecco perché ritieni che la selezione non funzioni. Invece di aggiornare, prova ad aprire il link in una nuova scheda.


Questo è vero, tuttavia non sembra risolvere il mio problema. Ho ancora bisogno di una soluzione poiché il mio evento onchange non si attiva quando firefox ripristina le modifiche al modulo quando eseguo un aggiornamento.
chiave inglese

0

Questa è la mia soluzione:

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

L'ho appena inserito nella parte superiore della pagina (con l'ID appropriato impostato) e funziona per me. Sostituendo getElementById con un ciclo su tutte le selezioni nella pagina, lascio come esercizio per il lettore;).


0

Per me nessuna delle soluzioni sopra ha funzionato. Ho dovuto impostare esplicitamente la selezione se non ne era impostata nessuna:

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

Vorrei che Firefox risolvesse questo problema :(


0

Al lavoro, ho appena corretto un bug in cui l'opzione della casella di selezione veniva visualizzata correttamente in Chrome ma non in Firefox, sulla stessa pagina web. Si è rivelato essere qualcosa di completamente diverso dai problemi di cui sopra, ma potrebbe essere un problema che stai riscontrando.

In Chrome, il colore del carattere della casella di selezione era nero. Per qualche motivo in Firefox, la casella di selezione ha ereditato il colore del carattere dal contenitore, che era bianco. Dopo aver aggiunto una regola CSS per forzare il colore del carattere della casella di selezione in nero, il set di valori è stato visualizzato correttamente.


0

autocomplete="off"o metterlo all'interno di un formfunziona per me.

Ciò che ha funzionato è stato utilizzare solo l'attributo selezionato senza "valore" come questo:

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

quindi o esegue il rendering <option selected>...</option>, o semplicemente<option>...</option>

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.