Mam listę rozwijaną ze znanymi wartościami. To, co próbuję zrobić, to ustawić listę rozwijaną na określoną wartość, o której wiem, że istnieje przy użyciu jQuery . Używając zwykłego JavaScript , zrobiłbym coś takiego:
ddl = document.getElementById("ID of element goes here");
ddl.value = 2; // 2 being the value I want to set it too.
Jednak muszę to zrobić za pomocą jQuery , ponieważ używam klasy CSS dla mojego selektora (głupie identyfikatory klientów ASP.NET ...).
Oto kilka rzeczy, które próbowałem:
$("._statusDDL").val(2); // Doesn't find 2 as a value.
$("._statusDDL").children("option").val(2) // Also failed.
Jak mogę to zrobić za pomocą jQuery ?
Aktualizacja
Jak się okazuje, za pierwszym razem miałem rację:
$("._statusDDL").val(2);
Gdy umieszczam alert tuż powyżej, działa dobrze, ale kiedy go usuwam i pozwalam mu działać z pełną prędkością, pojawia się błąd
Nie można ustawić wybranej właściwości. Nieprawidłowy indeks
Nie jestem pewien, czy jest to błąd w jQuery lub Internet Explorer 6 (domyślam się Internet Explorera 6 ), ale to jest strasznie denerwujące.
źródło
dd1 = document.getElementsByClassName('classname here'); dd1.value = 2;
Odpowiedzi:
Dokumentacja jQuery stwierdza:
To zachowanie występuje w
jQuery
wersjach1.2
i wyższych.Najprawdopodobniej chcesz to:
źródło
select
jest ukryty (display: none;
)? Nie mogę tego zrobić poprawnie ...$('._statusDDL [value="2"]').attr('selected',true);
Thanks!.change()
aby zobaczyć opcję w interfejsie rozwijanej listy, tj.$('#myID').val(3).change();
Z ukrytym polem musisz użyć następującego:
lub
źródło
Po prostu FYI, nie musisz używać klas CSS, aby to osiągnąć.
Możesz napisać następujący wiersz kodu, aby uzyskać poprawną nazwę kontrolną na kliencie:
ASP.NET wyrenderuje poprawnie identyfikator kontroli w jQuery.
źródło
Po prostu spróbuj
i nie z
źródło
Rozwiązania te wydają się zakładać, że każdy element na liście rozwijanej ma wartość val () odnoszącą się do ich pozycji na liście rozwijanej.
Sprawy są nieco bardziej skomplikowane, jeśli tak nie jest.
Aby odczytać wybrany indeks z listy rozwijanej, użyj tego:
Aby ustawić wybrany indeks listy rozwijanej, użyj tego:
Zauważ, że funkcja prop () wymaga JQuery w wersji 1.6 lub nowszej.
Zobaczmy, jak użyłbyś tych dwóch funkcji.
Załóżmy, że masz rozwijaną listę nazw miesięcy.
Możesz dodać przycisk „Poprzedni miesiąc” i „Następny miesiąc”, który przegląda aktualnie wybrany element listy rozwijanej i zmienia go na poprzedni / następny miesiąc:
A oto JavaScript, który uruchamiają te przyciski:
Przydatna jest również następująca witryna do pokazania, jak wypełnić listę rozwijaną danymi JSON:
http://mikesknowledgebase.com/pages/Services/WebServices-Page8.htm
Uff !!
Mam nadzieję że to pomoże.
źródło
Po przeanalizowaniu niektórych rozwiązań zadziałało to dla mnie.
Mam jedną listę rozwijaną z niektórymi wartościami i chcę wybrać tę samą wartość z innej listy rozwijanej ... Więc najpierw wstawiam zmienną
selectIndex
z mojej pierwszej listy rozwijanej.Następnie wybieram ten indeks z mojej drugiej listy rozwijanej.
Uwaga:
Myślę, że jest to najkrótsze, niezawodne, ogólne i eleganckie rozwiązanie.
Ponieważ w moim przypadku używam atrybutu danych wybranej opcji zamiast atrybutu wartości. Więc jeśli nie masz unikalnej wartości dla każdej opcji, powyższa metoda jest najkrótsza i słodka !!
źródło
Wiem, że to stare pytanie i powyższe rozwiązania działają dobrze, z wyjątkiem niektórych przypadków.
Lubić
Tak więc pozycja 4 pojawi się w przeglądarce jako „Wybrana”, a teraz chcesz zmienić wartość na 3 i pokazać „Pozycja 3” jako wybraną zamiast pozycji 4. Tak więc, zgodnie z powyższymi rozwiązaniami, jeśli używasz
Zobaczysz pozycję 3 wybraną w przeglądarce, ale kiedy przetwarzasz dane w php lub asp, znajdziesz wybraną wartość jako „4”. Powodem jest to, że Twój HTML będzie wyglądał tak.
i otrzymuje ostatnią wartość jako „4” w języku pobocznym serwera.
TAKIE MOJE KOŃCOWE ROZWIĄZANIE W TYM UWAGI
EDYCJA : Dodaj pojedynczy cudzysłów wokół „+ newselectedIndex +”, aby ta sama funkcjonalność mogła być używana dla wartości nienumerycznych.
Więc to, co robię, to usunięcie wybranego atrybutu, a następnie utworzenie nowego jako wybranego.
Byłbym wdzięczny za komentarze na ten temat od starszych programistów, takich jak @strager, @ y0mbo, @ISIK i inni
źródło
Jeśli mamy listę rozwijaną z tytułem „Klasyfikacja danych”:
Możemy przekształcić go w zmienną:
Następnie umieść w innej zmiennej wartość, którą chcemy, aby lista rozwijana miała:
Następnie możemy użyć pola, w które się wpisujemy
dataClsField
, wyszukaćmyValue
i ustawić je za pomocą.prop()
:Lub możesz po prostu użyć
.val()
, ale możesz użyć selektora,.
jeśli pasuje on do klasy w menu rozwijanym i powinieneś użyć cudzysłowu na wartości w nawiasie lub po prostu użyć zmiennej, którą ustawiliśmy wcześniej:źródło
Natknąłem się na to wiele razy podczas ładowania danych z wywołania Ajax. Ja także używam .NET, a dostosowanie selektora jQuery zajmuje trochę czasu. Aby rozwiązać występujący problem i uniknąć konieczności dodawania
setTimeout
właściwości, możesz po prostu wstawić „async: false
” w wywołaniu Ajax, a DOM zapewni wystarczająco dużo czasu na odzyskanie dodawanych obiektów. Mała próbka poniżej:źródło
Tylko uwaga - używałem selektorów symboli wieloznacznych w jQuery do przechwytywania elementów zaciemnionych przez identyfikatory klientów ASP.NET - to też może ci pomóc:
Zwróć uwagę na symbol wieloznaczny id * - znajdzie to Twój element, nawet jeśli nazwa to „ctl00 $ ctl00 $ ContentPlaceHolder1 $ ContentPlaceHolder1 $ MyDropDown”
źródło
Korzystam z funkcji rozszerzania, aby uzyskać identyfikatory klienta, na przykład:
Następnie możesz wywołać formanty ASP.NET w jQuery w następujący sposób:
źródło
Inną opcją jest ustawienie parametru sterującego ClientID = "Static" w .net, a następnie można uzyskać dostęp do obiektu w JQuery przy ustawionym identyfikatorze.
źródło
Zastosowanie
$("select[name$='MyDropDown']").val()
.źródło
$
aby była ona w pełni zgodna, a nie „kończąca się na”. Ale twoja sugestia jest prawdopodobnie szybsza niż dopasowanie tylko do nazwy klasy. Nawet szybciej byłobyelement.classname
lub#idname
.Jak ładujesz wartości do rozwijanej listy lub decydujesz, którą wartość wybrać? Jeśli robisz to za pomocą Ajax, powodem, dla którego potrzebujesz opóźnienia przed dokonaniem wyboru, może być to, że wartości nie zostały załadowane w momencie wykonania danego wiersza. Wyjaśniłoby to również, dlaczego zadziałało, gdy umieściłeś komunikat ostrzegawczy w linii przed ustawieniem statusu, ponieważ akcja ostrzegania dałaby wystarczająco dużo czasu na załadowanie danych.
Jeśli używasz jednej z metod Ajax jQuery'ego, możesz określić funkcję zwrotną, a następnie umieścić ją
$("._statusDDL").val(2);
w funkcji zwrotnej.Byłby to bardziej niezawodny sposób obsługi problemu, ponieważ można mieć pewność, że metoda została wykonana, gdy dane były gotowe, nawet jeśli zajęło to więcej niż 300 ms.
źródło
ClientIDMode = „Statyczny”
źródło
W moim przypadku udało mi się uruchomić go za pomocą metody .attr ().
źródło