Autor Zpráva
maxipes
Profil *
Zdravím,

řeším jeden takový problém. Mám select, u kterého mám nastaveno multiple. A zajímalo by mě, jestli je možné získat data do pole pro zpracování v tom pořadí, ve kterém to bylo naklikáno? Pole se mi sestaví v tom pořadí, jak jsou jednotlivé optiony v selectu, ale mě by se hodilo, aby to bylo ve vybraném pořadí... Existuje třeba nějaká jiná možnost, jak to zakomponovat do formuláře?
Str4wberry
Profil
Možná poslední vybranou položku vždy skriptem přehodit v <select>u za poslední vybranou.

Jinak bych asi spíš zvolil nějaké drag & drop vybírání a uspořádávání.
_es
Profil
maxipes, Str4wberry:
V selecte sa nemusí dať vždy identifikovať posledná vybraná položka (v JS). Udalosť onchange je vyvolaná po dokončení výberu - ak sa vyberá s klávesou shift, tak nie je jasné, ktorá vybraná položka bola vybraná posledná.
Str4wberry
Profil
Dá se použít onclick a poslední položka bude ta, které se od posledního kliknutí zapnul atribut selected.
_es
Profil
Str4wberry:
Dá se použít onclick
Udalosť onclick na prvku option nepodporujú všetky prehliadače a tiež to komplikuje použitie s klávesou shift.

které se od posledního kliknutí zapnul atribut selected.
No však práve, pri použití s klávesou shift a udalosti onchange sa môže od posledného kliknutia vlastnosť disabled zmeniť aj na viac ako jednom prvku.
Str4wberry
Profil
Bavíme se o onclicku*, nebo onchange**?

Ad *) Nefunguje ve starších IE, není problém zjistit pořadí.
Ad **) Zaregistruje až celou změnu, nezjistíme, co kdy bylo vybráno.
_es
Profil
Str4wberry:
Či už s jednou alebo druhou udalosťou je problém splniť zadanie. Udalosť onclick trebárs nereaguje na vyberanie prvkov cez klávesnicu. A na jedno vybranie či kliknutie sa dá vybrať aj viac prvkov, pričom je problém identifikovať poradie ich vybratia. „Nefunguje v starších IE“ znamená, že nefunguje aj v IE8.
Str4wberry
Profil
Nemyslím si, že by byl problém z toho onclicku vydolovat pořadí. Kliknu na první položku, zmáčknu Shift, kliknu na čtvrtou, pořadí se nastaví od první ke čtvrté. Kdybych položky vybral obráceně, pořadí bude obráceně. Ovládání klávesnicí by šlo udělat přes onkeyup.
Trejpa
Profil
Str4wberry:
Ovládání klávesnicí by šlo udělat přes onkeyup.
A které klávesy bys vybral? Kromě šipek, rychlého přechodu (Home, PageDown) se můžu v selectu pohybovat (a tím i vybírat) i pomocí písmen, čísel a dalších znaků, na které začínají položky. Rozdílnou službu udělá třeba dvojí kliknutí na klávesu T v závislosti, zda některá z položek na písmeno t začíná, nezačíná nebo je jich více. Samozřejmě vše v kombinaci se Shift, Ctrl a kliknutí (třeba odznačení).

Tohle zadání univerzální řešení pro klasický select asi nemá.
Str4wberry
Profil
Vždyť to je úplně jedno, jakou klávesu, klávesa by byla jen spouštěč přepočtu*. Stačilo by přece kontrolovat, kde se změnil selected.

*) Kromě toho Shiftu, kdyby to mělo být echt přesné a dodržovat pořadí při výběru s Shiftem.
_es
Profil
Str4wberry:
Pre IE8 by to bolo asi problém spraviť (pre všetky prípady). A udalosť onkeyup funguje len pre celý select.
Str4wberry
Profil
Ano, ty starší IE vypadají jako problém.

A udalosť onkeyup funguje len pre celý select.
To by opět nemělo vadit. Podstatné je, že se mění selected u jednotlivých <option>ů. Události onclick, onkeyup apod. jsou jen spouštěče; klidně by to mohl hlídat časovač.

Živá ukázka
_es
Profil
Str4wberry:
No, nejako tá živá ukážka nefunguje podľa zadania. Vypisuje to len vybrané optiony v poradí tak, ako sú v kóde. Pre zjednodušenie, select má aj vlastnosť options.
Trejpa
Profil
_es:
To už lze ale odchytávat a výskyt prvků porovnávat s předchozím stavem (stavy). Z tohoto porovnání pak určíš pořadí.
_es
Profil
Str4wberry:
Okrem toho to správne vo FF nereaguje na situáciu, keď sa stlačí tlačidlo myši, vyberie viacero volieb a potom tlačidlo myši pustí. Udalosť onchange tam asi musí byť. Nie je to až také jednoduché, ako sa na prvý pohľad zdá. V IE8 sa tá ukážka nespustí vôbec.
Str4wberry
Profil
Reakce na _es:
No, nejako tá živá ukážka nefunguje podľa zadania.
Také je to jen ukázka toho principu.

Okrem toho to správne vo FF nereaguje na situáciu, keď sa stlačí tlačidlo myši, vyberie viacero volieb a potom tlačidlo myši pustí. Udalosť onchange tam asi musí byť. Nie je to až také jednoduché, ako sa na prvý pohľad zdá. V IE8 sa tá ukážka nespustí vôbec.
Zdá se, že to řeší onmouseup.

Živá ukázka

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: