PDA

Pogčedajte punu verziju : <select> onClose event


godza
22. 07. 2006., 03:48
da li mogu nekako da handlujem onClose event (ne postoji tako nesto) za select element.

Ovaj event bi se aktivirao, kada se select box iz bilo kog razloga zatvori, bilo da korisnik odabere opciju bilo da klikne na dokument

onChange event se aktivira kada se odabere neka opcija iz select-a, koja nije trenutna, tj to mi ne odgovara

onBlur se aktivira kada kontrola izgubi focus. Ako mislite da se fokus gubi kada se klikne na body, gresite. ako je kontrola otvorena, i ako kliknete na body, kontrola se zatvara, ali i dalje ima fokus, tek posle drugog klika, ona gubi focus.

znaci kombinacijom onChange i onBlur, pokrivam skoro sve situacije, sem kada korisnik zatvara otvoreni select box klikom na body.

Ima li spasa?

robi-bobi
22. 07. 2006., 03:58
evo napamet:
mislim da postoji onClick na document i onda mozes proveravati sta je kliknuto.
e, ako je i tvoj <select> u fokusu, pokrio si i taj poslednji situation

P.S. DPT, forum koji ne spava :D

godza
22. 07. 2006., 04:09
hmh, moglo bi i tako, ali u ovom slucaju ce biti 10-tak select boxova, pa mi je malo nezgodno da koristim taj metod.

takodje, treba da mi se izvrsi i event kada je se odabere opcija koja je vec prethodno bila odabrana :/

znaci nisam jedini koji ne spava :)

ivanhoe
22. 07. 2006., 06:06
evo posto se ni meni ne spava (a i vrti mi se kad sklopim oci, pa bolje da to ne radim :D ) da malo mudrujem:

mogao bi da hvatas onclick na document kao sto rece robi-bobi, pa da proveris koji element ti ima fokus. Mozes da imas situaciju:
1) isti je kao sto je bio, plus izabrana je ista opcija kao ranije
2) isti ali sa drugom opcijom
3) izabran je drugi select box

ove genijalne zakljucke izvedes tako sto za svaki select zapamtis izabranu opciju plus pamtis koji element ima fokus, pa onda to poredis sa stanjem nakon klika... zvuci mnogo komplikovano, ali nije, to je samo moj literalni stil :D

Pedja
22. 07. 2006., 10:42
godza, ne bi bilo lose da objasnis zasto ti to treba. Nikako ne mogu da zamislim situaciju u kojoj je tak nesto neophodno. Cak ni desktop aplikacije nemaju event koji trazis - ako korsinik nije napravio izmenu, onda nema potrebe ni da se napravi neka akcija.

Uvek mozes na onFocus da uradis to sto treba da se uradi kada korisnik klikne na komponenu (to ce biti uradjeno i ako joj ne promeni vrednost), na onChange reagujes ako korsinik promeni sadrzaj komponente a na onBLur kada korsinik predje sa te komponente na neku drugu i to bi trebalo da pokriva sve slucajeve.

Dragan Babić
22. 07. 2006., 13:02
Pogledaj naslov ove teme u netibesu :)

oliver
22. 07. 2006., 13:28
loooool :1065:

da probamo s necim kompleksnijim? netvibes gura php, pa... :1074: :D

godza
22. 07. 2006., 18:26
vako,

zamisli situaciju.

imash link, kliknes na njega, pojavi se select box, kom se uradi focus(), korisnik treba da odabere opciju iz pojavljenog selecta ili da nastavi da surfuje dalje u oba slucaja taj select treba da nestane tj da se sakrije.

Jel sad kontash zashto mi treba?

Pedja
22. 07. 2006., 19:07
Meni se cini da sa stanovista interfejsa, to treba da iskoci kao dijalog u posebnom prozoru. Ovako kako si opisao ne deluje mi bas user friendly.

zextra
22. 07. 2006., 20:26
@dragan: omg :D takve stvari te prosto nateraju da se zamislis malo... :) mada, ko bi jos normalan ocekivao html tag u naslovu teme?? :)

jablan
23. 07. 2006., 01:10
imash link, kliknes na njega, pojavi se select box, kom se uradi focus(), korisnik treba da odabere opciju iz pojavljenog selecta ili da nastavi da surfuje dalje u oba slucaja taj select treba da nestane tj da se sakrije.
Interesantno rešenje. Pretpostavljam da ti se combo pojavljuje na mestu linka koji si kliknuo, i kad se zatvori treba da se ponovo pretvori u link, samo sa izmenjenom vrednošću?

Ovo mi zvuči praktično, ali sa usability stanovišta malo nespretno: link sugeriše određeno ponašanje (odlazak na drugu stranicu), korišćenje za druge stvari krši konzistentnost.

Jedno moguće rešenje su ti već rekli: obrada u onclick samog dokumenta. Ovo ne bi trebalo da pravi veliki problem, čak i to što ih imaš desetak: možeš korišćenjem custom atributa na selectima i javascripta u document.onload eventu da izvedeš da ti se po učitavanju svi takvi komboi zamene linkovima i postave odgovarajući event handleri na jednima i drugima...

// Edit:
Malo sam se igrao sa ovim i onblur se dešava pri prvom kliku na body, i na FF i na IE6. Ne znam na kom brauzeru si ti isprobavao...

Evo u atačmentu imaš kod koji sam ja isprobavao. Malo je traljav ali radi u oba brauzera i HTML je potpuno čist (specijalni SELECT-ovi se obeležavaju class atributom).

godza
23. 07. 2006., 13:40
- probaj da kliknes na specijalni link, pa odmah na body
- probaj da kliknes na specijalni link, otvori slect box pa odaberi opciju koja je vec selektovana
- probaj da kliknes na specijalnij link, otvori select box, pa klikni na body

FF 1.5, IE 6

Do ovoga sam i ja doshao :)

zextra
23. 07. 2006., 13:50
Koliko ja primecujem, select uopste nema focus u momentu kada ga prvi put prikazes, pa pokusaj to da resis za pocetak...

jablan
23. 07. 2006., 14:09
Ok, focus() rešava prvi problem. Što se druga dva tiče... Hm, bože moj, korisnik će morati da se strpi do sledećeg klika... ;) Sve u svemu, nije loš fazon za neke stvari. Za šta si planirao da ga koristiš?

godza
23. 07. 2006., 19:04
u pravu ste focus() resava prvi problem ;)