2012-11-08 8 views
7

Ho una selezione con f.e. 10 opzioni ('uno', 'due', 'tre', ...). Caricando la pagina viene selezionata la prima opzione 'una'.L'impostazione del valore di selezione non ha alcun effetto sull'uso della tastiera

Da una funzione che impostata quinta opzione

$("myselect").val('five'); 

Infatti ora quinti opzione è mostrata nella selezione e valore è anche impostato correttamente.

Ma ora accedo al modulo finché non ho raggiunto questa selezione. E se ora uso il tasto "tastiera giù", la selezione salta all'opzione "due" e non "sei".

Come impostare anche un'opzione selezionata che funzioni per una tastiera successiva?

+2

Sembra che succeda solo in Firefox http://jsfiddle.net/JM2dZ/ – Musa

+0

Funziona in Chrome, ma non in Firefox. Anche facendo clic sul menu a discesa non aiuta. –

+1

Ecco un bug jQuery con lo stesso problema: http://bugs.jquery.com/ticket/11488 –

risposta

5

Provare a impostare la proprietà selectedIndex. Vedi sotto,

$('#myselect').val("5").prop('selectedIndex', 4); 

DEMO:http://jsfiddle.net/kLZ7z/

Un altro approccio migliore pulito è

var nValue = "5"; 
$('option', '#myselect').filter(function() {   
    return this.value == nValue; 
}).prop('selected', true); 

DEMO:http://jsfiddle.net/kLZ7z/2/

0

indovinare un po ', ma provate questo:

$('#myselect option').each(function(){ 
    $(this).removeAttr('selected')); 
}); 
$('#myselect option').eq(4).attr('selected', 'selected'); 

Questo è un po' di pseudo-codice non testato, giusto per dare un'idea di che cosa provare.

+1

non funziona (anche il modulo di risposta Asad no). - Ma quello che ho appena scoperto - sembra essere un problema di Firefox, come IE e Chrome come mi aspettavo –

+0

@FabianKnauf: Prova con la riga 'removeAttr'. –

1

Questo è un bug di Firefox. Una soluzione che ho trovato è quella di utilizzare .prop('selected', true) sull'opzione, invece di utilizzare .val sulla selezione.

$('#myselect').children('option[value="five"]').prop('selected', true); 

DEMO: http://jsfiddle.net/JM2dZ/1/

NOTA: Non è necessario disinserire selected sulle altre opzioni prima, così facendo si effettivamente causare il problema di tenere accadendo.

Problemi correlati