Używając podstawowego jQuery, w jaki sposób usuwasz wszystkie opcje pola wyboru, a następnie dodajesz jedną opcję i ją wybierasz?
Moje pole wyboru jest następujące.
<Select id="mySelect" size="9"> </Select>
EDYCJA: Poniższy kod był pomocny w tworzeniu łańcuchów. Jednak (w Internet Explorerze) .val('whatever')
nie wybrał dodanej opcji. (Zrobiłem używać tego samego „wartość” w obu .append
a .val
).
$('#mySelect').find('option').remove().end()
.append('<option value="whatever">text</option>').val('whatever');
EDYCJA: Próbując zmusić go do naśladowania tego kodu, używam następującego kodu za każdym razem, gdy strona / formularz jest resetowany. W tym polu wyboru znajduje się zestaw przycisków opcji. .focus()
było bliżej, ale opcja nie wyglądała na wybraną tak jak w przypadku .selected= "true"
. W moim istniejącym kodzie nie ma nic złego - staram się tylko nauczyć jQuery.
var mySelect = document.getElementById('mySelect');
mySelect.options.length = 0;
mySelect.options[0] = new Option ("Foo (only choice)", "Foo");
mySelect.options[0].selected="true";
EDYCJA: wybrana odpowiedź była zbliżona do tego, czego potrzebowałem. To działało dla mnie:
$('#mySelect').children().remove().end()
.append('<option selected value="whatever">text</option>') ;
Ale obie odpowiedzi doprowadziły mnie do mojego ostatecznego rozwiązania ...
źródło
.append($("<option></option>").attr("value", '123').text('ABC!')
.append($("<option></option>", {'value':'123'}).text('ABC!')
źródło
empty()
okazało się oczywiście szybsze;) jsperf.com/find-remove-vs-empty.val('whatever')
na końcu łańcucha, jak w odpowiedzi Matta.dlaczego nie użyć zwykłego javascript?
źródło
Jeśli Twoim celem jest usunięcie wszystkich opcji z zaznaczenia oprócz pierwszej (zazwyczaj opcji „Proszę wybrać element”), której możesz użyć:
źródło
Miałem błąd w IE7 (działa dobrze w IE6), gdzie użycie powyższych metod jQuery wyczyści zaznaczenie w DOM, ale nie na ekranie. Korzystanie z IE Developer Toolbar mogę potwierdzić, że wybierzesz zostały wyczyszczone i miał nowe elementy, ale wizualnie select wciąż pokazywało stare elementy - nawet jeśli nie można było ich wybrać.
Rozwiązaniem było użycie standardowych metod / właściwości DOM (tak jak miało to miejsce w oryginalnym plakacie) zamiast czyszczenia jQuery - nadal używając jQuery do dodawania opcji.
źródło
Nie jestem pewien, co dokładnie rozumiesz przez „dodaj i wybierz”, ponieważ i tak zostanie on domyślnie wybrany. Ale gdyby dodać więcej niż jeden, miałoby to większy sens. Co powiesz na coś takiego:
Odpowiedź na „EDYCJA” : Czy możesz wyjaśnić, co rozumiesz przez „To pole wyboru jest wypełnione zestawem przycisków opcji”?
<select>
Element może nie (prawnie) zawierają<input type="radio">
elementy.źródło
źródło
źródło
Dzięki otrzymanym odpowiedziom udało mi się stworzyć coś takiego, co odpowiada moim potrzebom. Moje pytanie było nieco dwuznaczne. Dzięki za kontynuację. Mój ostatni problem został rozwiązany poprzez włączenie „wybranego” do opcji, którą chciałem wybrać.
źródło
Co powiesz na zmianę html na nowe dane?
Inny przykład:
źródło
Najpierw wyczyść wszystkie istniejące opcje wykonaj pierwszą (- Wybierz--)
Dołącz nowe wartości opcji za pomocą pętli jedna po drugiej
źródło
Znalazłem w sieci coś jak poniżej. Z tysiącami opcji takich jak w mojej sytuacji jest to o wiele szybsze niż
.empty()
lub.find().remove()
z jQuery.Więcej informacji tutaj .
źródło
Inny sposób:
Pod tym linkiem znajdują się dobre praktyki https://api.jquery.com/select/
źródło
Pierwszy wiersz kodu usunie wszystkie opcje pola wyboru, ponieważ nie wymieniono kryteriów wyszukiwania opcji.
Drugi wiersz kodu doda opcję z określoną wartością („testValue”) i tekstem („TestText”).
źródło
Opierając się na odpowiedzi mauretto, jest to trochę łatwiejsze do odczytania i zrozumienia:
Aby usunąć wszystkie opcje oprócz jednej z określoną wartością, możesz użyć tego:
Byłoby lepiej, gdyby opcja dodawania była już dostępna.
źródło
Używa jquery prop (), aby wyczyścić wybraną opcję
źródło
Spowoduje to zastąpienie istniejącego mySelect nowym mySelect.
źródło
Możesz to zrobić po prostu zastępując HTML
źródło
źródło
źródło
Widziałem ten kod w Select2 - Usuwanie zaznaczeń
Ten kod działa dobrze z jQuery nawet bez Select2
źródło
Mam nadzieję, że to zadziała
źródło
źródło