Ho un elenco a discesa con valori noti. Quello che sto cercando di fare è impostare l'elenco a discesa su un particolare valore che so che esiste usando jQuery. Usando il normale JavaScript, farei qualcosa come:
ddl = document.getElementById("ID of element goes here");
ddl.value = 2; // 2 being the value I want to set it too.
Tuttavia, ho bisogno di farlo con jQuery, perché sto usando una classe CSS per il mio selettore (stupido ASP.NET client ids...).
Ecco alcune cose che ho provato:
$("._statusDDL").val(2); // Doesn't find 2 as a value.
$("._statusDDL").children("option").val(2) // Also failed.
Come posso farlo con jQuery?
Aggiornamento
Quindi, come si è scoperto, ho avuto ragione la prima volta con:
$("._statusDDL").val(2);
Quando metto un avviso appena sopra funziona bene, ma quando rimuovo l'avviso e lo lascio girare a tutta velocità, ottengo l'errore
Impossibile impostare la proprietà selezionata. Indice non valido
Non sono sicuro se sia un bug di jQuery o di Internet Explorer 6 (immagino Internet Explorer 6), ma è terribilmente fastidioso.
1 documentazione di jQuery1 afferma:
[jQuery.val] controlla, o seleziona, tutti i pulsanti radio, le caselle di controllo e le opzioni di selezione che corrispondono all'insieme dei valori.
Questo comportamento è in jQuery
versioni 1.2
e superiori.
È molto probabile che tu voglia questo:
$("._statusDDL").val('2');
Come stai caricando i valori nell'elenco a discesa o determinando quale valore selezionare? Se lo stai facendo usando Ajax, allora la ragione per cui hai bisogno del ritardo prima che avvenga la selezione potrebbe essere perché i valori non sono stati caricati nel momento in cui la linea in questione viene eseguita. Questo spiegherebbe anche perché ha funzionato quando hai messo una dichiarazione di allerta sulla linea prima di impostare lo stato, poiché l'azione di allerta avrebbe dato un ritardo sufficiente per il caricamento dei dati.
Se stai usando uno dei metodi Ajax di jQuery, puoi specificare una funzione di callback e poi mettere $("._statusDDL").val(2);
nella tua funzione di callback.
Questo sarebbe un modo più affidabile di gestire il problema in quanto si potrebbe essere sicuri che il metodo viene eseguito quando i dati sono pronti, anche se ci volesse più di 300 ms.