Έχω μια αναπτυσσόμενη λίστα με γνωστές τιμές. Αυτό που προσπαθώ να κάνω είναι να ορίσω την αναπτυσσόμενη λίστα σε μια συγκεκριμένη τιμή που γνωρίζω ότι υπάρχει χρησιμοποιώντας την jQuery. Χρησιμοποιώντας κανονική JavaScript, θα έκανα κάτι τέτοιο:
ddl = document.getElementById("ID of element goes here");
ddl.value = 2; // 2 being the value I want to set it too.
Ωστόσο, πρέπει να το κάνω αυτό με το jQuery, επειδή χρησιμοποιώ μια κλάση CSS για τον επιλογέα μου (ηλίθια ASP.NET client ids...).
Εδώ είναι μερικά πράγματα που έχω δοκιμάσει:
$("._statusDDL").val(2); // Doesn't find 2 as a value.
$("._statusDDL").children("option").val(2) // Also failed.
Πώς μπορώ να το κάνω με την jQuery;
Ενημέρωση
Έτσι, όπως αποδεικνύεται, το είχα κάνει σωστά την πρώτη φορά με:
$("._statusDDL").val(2);
Όταν βάζω μια ειδοποίηση ακριβώς από πάνω λειτουργεί μια χαρά, αλλά όταν αφαιρώ την ειδοποίηση και το αφήνω να τρέξει σε πλήρη ταχύτητα, λαμβάνω το σφάλμα
Δεν κατέστη δυνατό να οριστεί η επιλεγμένη ιδιότητα. Invalid Index
Δεν είμαι σίγουρος αν πρόκειται για σφάλμα του jQuery ή του Internet Explorer 6 (υποθέτω ότι είναι ο Internet Explorer 6), αλλά είναι τρομερά ενοχλητικό.
Η τεκμηρίωση της jQuery's αναφέρει:
val] ελέγχει, ή επιλέγει, όλα τα κουμπιά επιλογής, τα πλαίσια ελέγχου και τις επιλογές επιλογής που ταιριάζουν με το σύνολο των τιμών.
Αυτή η συμπεριφορά υπάρχει στις εκδόσεις jQuery
από 1.2
και πάνω.
Πιθανότατα το θέλετε αυτό:
$("._statusDDL").val('2');
Απλά δοκιμάστε με
$("._statusDDL").val("2");
και όχι με
$("._statusDDL").val(2);
Πώς φορτώνετε τις τιμές στην αναπτυσσόμενη λίστα ή πώς καθορίζετε ποια τιμή θα επιλέξετε; Αν το κάνετε αυτό χρησιμοποιώντας Ajax, τότε ο λόγος που χρειάζεστε την καθυστέρηση πριν από την επιλογή μπορεί να είναι επειδή οι τιμές δεν είχαν φορτωθεί τη στιγμή που εκτελούνταν η εν λόγω γραμμή. Αυτό θα εξηγούσε επίσης γιατί λειτούργησε όταν βάλατε μια δήλωση ειδοποίησης στη γραμμή πριν από τον καθορισμό της κατάστασης, καθώς η ενέργεια ειδοποίησης θα έδινε αρκετή καθυστέρηση για να φορτώσουν τα δεδομένα.
Εάν χρησιμοποιείτε μια από τις μεθόδους Ajax της jQuery's, μπορείτε να καθορίσετε μια συνάρτηση επανάκλησης και στη συνέχεια να βάλετε $("._statusDDL").val(2);
στη συνάρτηση επανάκλησης.
Αυτός θα ήταν ένας πιο αξιόπιστος τρόπος χειρισμού του ζητήματος, καθώς θα μπορούσατε να είστε σίγουροι ότι η μέθοδος εκτελέστηκε όταν τα δεδομένα ήταν έτοιμα, ακόμη και αν χρειάστηκε περισσότερο από 300 ms.