2011-01-13 18 views
258

Desidero impostare un'opzione precedentemente selezionata per essere visualizzata al caricamento della pagina. Ho provato con il seguente codice:Imposta l'opzione selezionata della casella di selezione

$("#gate").val('Gateway 2'); 

con

<select id="gate"> 
    <option value='null'>- choose -</option> 
    <option value='Gateway 1'>Gateway 1</option> 
    <option value='Gateway 2'>Gateway 2</option> 
</select> 

Ma questo non funziona. Qualche idea?

+7

In realtà è così che dovrebbe funzionare, sei sicuro di aver impostato il valore in document.ready()? Forse il codice viene eseguito quando la selectbox non è ancora pronta. – Morph

risposta

385

Questo sicuramente dovrebbe funzionare. Here's a demo. Assicurarsi di aver inserito il codice in una $(document).ready:

$(function() { 
    $("#gate").val('Gateway 2'); 
}); 
+4

ok, quando scendo l'elenco viene evidenziato ma non viene visualizzato come primo elemento nell'elenco –

+1

@ArtWorkAD, cosa intendi per primo elemento nell'elenco? Non capisco perfettamente il tuo requisito. –

+2

ahh l'ho dichiarato non nella funzione di pronto documento ... grazie! –

5

che funziona bene. Vedi questo violino: http://jsfiddle.net/kveAL/

È possibile che tu debba dichiarare il tuo jQuery in un gestore $(document).ready()?

Inoltre, potresti avere due elementi con lo stesso ID?

124
$(document).ready(function() { 
    $("#gate option[value='Gateway 2']").prop('selected', true); 
    // you need to specify id of combo to set right combo, if more than one combo 
}); 
+0

Funziona in modo impeccabile .. – Cyber

-1

Ho riscontrato un problema in cui il valore non è stato impostato a causa di un errore di sintassi prima della chiamata.

$("#someId").value(33); //script bailed here without showing any errors Note: .value instead of .val 
$("#gate").val('Gateway 2'); //this line didn't work. 

Verificare la presenza di errori di sintassi prima della chiamata.

+0

Per quanto utile sia ricordare di controllare gli errori di sintassi, questa non è una risposta. –

-1
// Make option have a "selected" attribute using jQuery 

var yourValue = "Gateway 2"; 

$("#gate").find('option').each(function(i, opt) { 
    if(opt.value === yourValue) 
     $(opt).attr('selected', 'selected'); 
}); 
+1

Questo loopererà anche oltre il valore selezionato, il che è inefficiente –

+0

Inoltre '.attr()' è stato il modo sbagliato di fare questo da molto prima che questa risposta fosse pubblicata. – Auspex

0
$(function() { 
$("#demo").val('hello'); 
}); 
19

$('#gate').val('Gateway 2').prop('selected', true);

+2

Strani molti hanno trascurato questa soluzione. – adi518

+0

Molto simile a '$ ('# your-select-box-id: nth-child (2)'). Prop ('selected', true)' che funziona, con aggiornamento visivo del drop-box. –

1

Il mio problema

get_courses(); //// To load the course list 
$("#course").val(course); //// Setting default value of the list 

Ho avuto lo stesso problema. L'unica differenza dal codice è che mi stava caricando la casella di selezione tramite una chiamata AJAX e non appena è stato eseguito la chiamata AJAX che avevo impostato il valore predefinito della casella di selezione

La soluzione

get_courses(); 
    setTimeout(function() { 
    $("#course").val(course); 
    }, 10); 
+0

hai analizzato correttamente il problema, ma la soluzione è cattiva e fragile. devi usare una funzione di callback allegata alla tua chiamata ajax – icksde

-2

Addizione a @icksde e @Korah (thx entrambi!)

Quando si costruisce le opzioni con AJAX la document.ready può essere attivato prima che la lista è costruita, in modo

Questo non funziona

$(document).ready(function() { 
    $("#gate").val('Gateway 2'); 
}); 

Questo fa

un timeout funziona, ma come @icksde dice che è fragile (I ha in realtà bisogno di 20ms in vece di 10ms). È meglio per adattarsi all'interno della funzione AJAX simili:

$("#someObject").change(function() { 
    $.get("website/page.php", {parameters}, function(data) { 
     $("#gate").append("<option value='Gateway 2'">" + "Gateway 2" + "</option>"); 
     $("#gate").val('Gateway 2'); 
    }, "json"); 
}); 
9

ho trovato utilizzando il metodo jQuery .val() per avere uno svantaggio significativo.

<select id="gate"></select> 
$("#gate").val("Gateway 2"); 

Se questa casella di selezione (o qualsiasi altro oggetto di input) è in forma e non v'è un pulsante di reset utilizzato in forma, quando il pulsante di reset viene cliccato il valore impostato andranno cancellato e non ripristinare la valore iniziale come ci si aspetterebbe.

Questo sembra funzionare al meglio per me.

Per Selezionare le caselle

<select id="gate"></select> 
$("#gate option[value='Gateway 2']").attr("selected", true); 

Per gli ingressi di testo

<input type="text" id="gate" /> 
$("#gate").attr("value", "your desired value") 

Per gli ingressi textarea

<textarea id="gate"></textarea> 
$("#gate").html("your desired value") 

Per le caselle checkbox

<input type="checkbox" id="gate" /> 
$("#gate option[value='Gateway 2']").attr("checked", true); 

Per i pulsanti di opzione

<input type="radio" id="gate" value="this"/> or <input type="radio" id="gate" value="that"/> 
$("#gate[value='this']").attr("checked", true); 
4
$("#form-field").val("5").trigger("change"); 
+0

Sarebbe stato bello se tu avessi incluso alcune informazioni su questo. Questo è un ottimo esempio di come DOVREBBE farlo, SE hai il codice che sta guardando per le modifiche alla selezione. –

3

Questa sarebbe un'altra opzione:

$('.id_100 option[value=val2]').prop('selected', true); 
1

Ho avuto lo stesso problema.

Soluzione: aggiungere un aggiornamento.

$("#gate").val('Gateway 2'); 
$("#gate").selectmenu('refresh'); 
+0

questo è solo per jqueryui selectmenu, non standard html – stuartdotnet

Problemi correlati