Chcę mieć listę rozwijaną z zestawem wartości, ale także pozwolić użytkownikowi „wybrać” nową wartość, której tam nie ma.
Widzę, że select2 obsługuje to, jeśli używasz go w tags
trybie, ale czy jest sposób, aby to zrobić bez używania tagów?
jquery-select2
johnjohn
źródło
źródło
Odpowiedzi:
W przypadku wersji 4+ sprawdź odpowiedź Kevina Browna poniżej
W Select2 3.5.2 i niższych możesz użyć czegoś takiego:
(wzięte z odpowiedzi na liście mailingowej select2, ale nie mogę teraz znaleźć linku)
źródło
selectOnBlur: true
testamentu wykona zadanie, zobacz: stackoverflow.com/questions/25616520/…tags: []
wraz zcreateSearchChoice
.Doskonała odpowiedź udzielana przez @fmpwizard pracuje Select2 3.5.2 i poniżej, ale to nie będzie działać w 4.0.0 .
Od samego początku (ale być może nie tak wcześnie jak to pytanie) Select2 obsługuje „tagowanie”: gdzie użytkownicy mogą dodawać własne wartości, jeśli im na to pozwolisz. Można to włączyć za pomocą
tags
opcji i można pobawić się przykładem w dokumentacji .Domyślnie utworzy to opcję, która ma taki sam tekst, jak wpisane hasło wyszukiwania. Możesz zmodyfikować obiekt, który jest używany, jeśli chcesz oznaczyć go w specjalny sposób lub utworzyć obiekt zdalnie po jego wybraniu.
Oprócz tego, że służy jako łatwa do wykrycia flaga na obiekcie przekazywanym przez
select2:select
zdarzenie, dodatkowa właściwość umożliwia również nieco inne renderowanie opcji w wyniku. Więc jeśli chcesz wizualnie zasygnalizować fakt, że jest to nowa opcja, umieszczając obok niej „ (nowy) ”, możesz zrobić coś takiego.źródło
Aby zachować kod, zamieszczam kod @rrauenza Fiddle z jego komentarza .
HTML
jQuery
źródło
Ponieważ wiele z tych odpowiedzi nie działa w 4.0+, jeśli używasz Ajax, możesz poprosić serwer o dodanie nowej wartości jako opcji. Więc to działałoby tak:
[{"text":" my NEW option)","id":"0"}]
źródło
Myślę, że teraz jest lepsze rozwiązanie
po prostu ustawić tagowanie na true w wybranych opcjach?
z https://select2.org/tagging
źródło
Poprawa w odpowiedzi @fmpwizard:
źródło
Właśnie natknąłem się na to od Kevina Browna. https://stackoverflow.com/a/30019966/112680
Wszystko, co musisz zrobić,
v4.0.6
to użyćtags: true
parametru.źródło
W większości przypadków musimy porównać wartości z niewrażliwym rejestrem. A ten kod zwróci false, co doprowadzi do utworzenia zduplikowanych rekordów w bazie danych. Ponadto metoda String.prototype.localeCompare () nie jest obsługiwana przez przeglądarkę Safary i ten kod nie będzie działał w tej przeglądarce;
lepiej zastąpi
źródło
Dzięki za pomoc, użyłem poniższego kodu w Codeigniter II używam wersji: 3.5.2 programu select2.
źródło