Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jQuery][JS] Przerobienie SELECT, by działał inaczej
Forum PHP.pl > Forum > Po stronie przeglądarki
Blackhole
Witam.
Potrzebuję zmienić funkcjonalność elementu SELECT z atrybutem MULTIPLE, aby kliknięcia w zawarte w nim elementy OPTION nie powodowały usuwania wcześniejszych wyborów, ale by każde kliknięcie w OPTION dodawało/usuwało wybranie tylko tego pojedyńczego elementu. Dokładniej mówiąc: SELECT ma się zachowywać tak, aby klikanie w OPTION działało tak, jakby użytkownik przy kliknięciu zawsze trzymał klawisz Control.
Jak można to zrobić?

http://doscniewoli.pl
trueblue
Przed każdym kliknięciem musiałbyś zapisać stan wybranych opcji, po kliknięciu zaznaczyć je wraz z klikniętą.
Ale czy tak nie jest prościej? http://jsfiddle.net/fvwkmj47/
Blackhole
Najpierw właśnie myślałem, że będę musiał zapamiętywać kliknięte opcje, ale wydawało mi się to niezbyt dobrym rozwiązaniem. Twoje jest lepsze smile.gif
Zapytam jeszcze tylko... Może da się jakoś zmienić wewnętrzną funkcjonalność elementu SELECT zmieniając funkcję, jaka wykonywana jest przy kliknięciu w OPTION?
trueblue
Musiałbyś postąpić podobnie. Podczas kliknięcia zapamiętać zaznaczone opcje, a potem przetworzyć w niestandardowy sposób te i klikniętą opcję, po czym nanieść je na elementy.
Blackhole
Mógłbym prosić jeszcze o przykład jakiejś takiej funkcji, którą podpięłoby się pod "onclick", by zmienić działanie kliknięcia?
To rozw. byłoby jednak dla mnie mnie pracochłonne, bo nie musiałbym w wielu miejscach w kodzie zmieniać.
trueblue
Można również podmienić wszystkie selecty na tego diva z pomocą JS.

Jakie działanie miałby mieć select?
Blackhole
Cytat(trueblue @ 28.03.2015, 19:19:46 ) *
Można również podmienić wszystkie selecty na tego diva z pomocą JS.

Wolałbym tak nie robić, aby od razu w kodzie widzieć, co będzie na stronie. To utrudniłoby debugowanie.

Cytat(trueblue @ 28.03.2015, 19:19:46 ) *
Jakie działanie miałby mieć select?

Zwykły SELECT z tą jedną zmianą, aby kliknięcie w OPTION działało, jak kliknięcie w przytrzymanym CTRL.
Blackhole
Dzięki. Niestety nie potrafię doprowadzić, by działało to poprawnie.
Mam kod
  1. $(document).ready(function() {
  2. $('option').mousedown(function(e) {
  3. e.preventDefault();
  4. $(this).prop('selected', !$(this).prop('selected'));
  5. return false;
  6. });
  7. });
Po kliknięciu w OPTION usuwa się poprzednio wybrane OPTION ohno-smiley.gif Gdy kilkam z trzymanym CTRL, to nic się nie dzieje.
trueblue
Zajrzyj do konsoli przeglądarki (Chrome->F12->Console).
Blackhole
Zaglądałem.
Raz pojawia się "Metoda getPreventDefault() jest przestarzała. Należy używać defaultPrevented.", a potem już nic.
trueblue
Wrzuć to na jsfiddle, dołączając jQuery w wersji jakiej używasz u siebie.
Blackhole
https://jsfiddle.net/JackK/ovsy8rp0/13/
Używam jQuery v1.9.0
trueblue
Ten działa również na FF: https://nerdstuckathome.wordpress.com/2012/...ng-ctrl-button/
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.