Ernest Syska

Ernest Syska Przedsiębiorca

Temat: Weryfikacja multiselecta

Cześć!

Ostatnia pomoc okazała się bardzo cenna, więc chciałbym zapytać Was o następującą rzecz.

Mam zwyczajny multiselect, w którym chciałbym kontrolować ilość wybranych pozycji. Tzn, jeśli klient wybierze więcej niż 15, js krzyczy że nie można tego robić. Do tej pory uzywałem (element funkcji validate()):

if ( document.formularz_softnew.cat.selectedIndex >= 16 )
{
alert ( "Niestety nie możesz wybrać więcej niż 15 kategorii IT do jednego oprogramowania." );
document.formularz_softnew.cat.focus();
return false;
}

Ale okazało się że selectedIndex nie zlicza SUMY zaznaczonych w selecie pozycji ale liczy, którą od początku listy pozycję zaznaczono.

Powiedzcie proszę jak sprawić aby sprawdzać ile pozycji łącznie wybrał klient w multiselekcie, niezależnie od lokalizacji pozycji na liście wyboru.

Pozdrawiam i góry dziękuje.
Ernest

konto usunięte

Temat: Weryfikacja multiselecta

Ernest Syska:
[...]
Mam zwyczajny multiselect, w którym chciałbym kontrolować ilość wybranych pozycji. Tzn, jeśli klient wybierze więcej niż 15, js krzyczy że nie można tego robić.

W html5 pojawić się ma atrybut `selectedOptions`[1], na chwilę obecną jednak musisz sam zliczać ilość zaznaczonych opcji. Czyli musisz przeiterować po wszystkich potomnych elementach <option> i określić, ile z nich posiada atrybut `selected` o wartości
będącej ekwiwalentem logicznego true. W jQuery zadanie to jest banalne:

$('#select_id option:selected').length


Mimo wszystko ograniczenie liczby zaznaczonych opcji nie jest trywialne, gdyż nie ma jednoznacznie określonego zdarzenia, które odpalałoby się tuż przed zaznaczeniem kolejnej opcji. Trzeba więc wykorzystać zdarzenie `ochange` selecta i porównywać jego stan sprzed i po zmianie (to wymaga jakiejś serializacji stanu selecta) i w razie przekroczenia limitu należy powrócić do stanu poprzedniego. W sieci znajdziesz gotowe rozwiązania [2].

[1] http://www.whatwg.org/specs/web-apps/current-work/#dom...
[2] http://www.pengoworks.com/workshop/jquery/field/field....Tomasz Elendt edytował(a) ten post dnia 29.07.09 o godzinie 20:57
Ernest Syska

Ernest Syska Przedsiębiorca

Temat: Weryfikacja multiselecta

Widzę że jak bumerang wraca jQuery. OK. Spróbuję, w sumie czemu nie. Dzięki wielkie.

pozdrawiam,
eS

konto usunięte

Temat: Weryfikacja multiselecta

Ernest Syska:
Widzę że jak bumerang wraca jQuery.

Jasne, nie trzeba pisać w jQuery. Polecam nawet spróbować zaimplementować coś takiego bez użycia żadnych bibliotek/frameworków, choćby ze względów edukacyjnych.

Wiem jak takie coś napisać. I wiem, że prawdziwym problemem jest to, że napisać to można na wiele sposobów (w różny sposób można się odwoływać do elementów, można użyć różnych modeli zdarzeń — wedle „standardów” DOM level 0, 1, 2, 3). Ale naprawdę, nie mam ochoty tłumaczyć dlaczego napisałem coś tak, a nie inaczej.

Dlatego w większości przypadków piszę i podaję przykłady implementacji w jQuery, który jest moim "JS library of choice".

Nie zmuszam jednak nikogo do używania jQuery. Nie zmuszam nawet do używania jakiejkolwiek zewnętrznej biblioteki. Tylko w takim przypadku niestety niezbędna jest gruntowna wiedza na temat standardów i stopnia ich implementacji w najpopularniejszych przeglądarkach internetowych.

W mojej poprzedniej wypowiedzi zawarłem instrukcję słowną – możesz ją wykorzystać i zaimplementować rozwiązanie w dowolnie wygodny dla Ciebie sposób.
Marcin Witek

Marcin Witek isido.pl ułatwia
pracę - polski sytem
zarządzania
projekt...

Temat: Weryfikacja multiselecta

Ernest Syska:
Powiedzcie proszę jak sprawić aby sprawdzać ile pozycji łącznie wybrał klient w multiselekcie, niezależnie od lokalizacji pozycji na liście wyboru.

na szybko i bez sprawdzania - po właściwości selected konkretnej opcji? coś jak

var iSelCount = 0 ;
var oSel = document.getElementById('selectid');
for(var i=0;i<oSel.options.length;i++){
if(oSel.options[i].selected)iSelCount++
}
if(iSelCount>15){....
Ernest Syska

Ernest Syska Przedsiębiorca

Temat: Weryfikacja multiselecta

Ależ ja nie mam najmniejszego problemu z jQuery, nawet lepiej. Problem w tym, że dość marnie nim się posługuję. Narazie próbuję użyć podanego gotowca jquery.fields.js.

pozdrawiam,
ESErnest Syska edytował(a) ten post dnia 30.07.09 o godzinie 09:12
Ernest Syska

Ernest Syska Przedsiębiorca

Temat: Weryfikacja multiselecta

Kolejny raz przyznaje że JQuery (+ gadżet jquery.field.js) to przyjemna czarna skrzynka, która przyspiesza robotę. Nie robię doktoratu z javascriptu (ani nie jestem pełnokrwistym infomatykiem ) więc dla mnie jest to wystarczające :).

Dzięki zatem, powodzenia.
Ernest

Następna dyskusja:

Weryfikacja stanu techniczn...




Wyślij zaproszenie do