ugrás a tartalomhoz

JavaScript esemény ütközés

rrd · 2009. Feb. 13. (P), 13.36
Adott egy oldal egy inputtal és egy pár linkkel. Az input mező onChange eseményre elküld a szervernek egy ajax hívást, hogy beállítson egy session változót. A szerver válaszát megjeleníti az oldalon.

Az a gondom, hogy ha a user átírja az input értékét és rákattint egyből utána az egyik linkre, akkor a link onClick és az input onChange eseménye egyszerre következik be.

A kattintás miatt a böngésző továbbdobja a usert a linkelt oldalra és emiatt az onChange-hez kapcsolt függvény nem tud lefutni. Be tudnék éppen tenni valami késleltetést a link katt-hoz de nem tűnik a legjobb megoldásnak.

Ötletek?
 
1

sjax

zila · 2009. Feb. 13. (P), 13.41
Ha fontosabb az onChange lefutása minden másnál, akkor vagy kitennék egy modális homokórát (beszürkítve/eltakarva az oldalt) hogy bizony amíg ez nem fut le addig senki sehova. Vagy nem aszinkron hívást indítanék onchange-re hanem szinkront (sjax :), ezestben mindenképpen megvárja a szerver válaszát az onchange.
2

el is felejtettem, hogy lehet

rrd · 2009. Feb. 13. (P), 13.53
el is felejtettem, hogy lehet szinkron módot is használni :)
Megnézem, hogy ezzel jó lesz-e
3

Nem túl barátságos...

vbence · 2009. Feb. 13. (P), 14.08
Ha az UI befagy amég nem válaszol a szerver. Az ajax célja gondolom a felhasznlói élmény javítása, nem az ősz hajszálak maximalizásása ;)

Szerintem az AJAX kérés elküldésekor állíts be egy flaget, hogy "események felfüggesztve". A link clickje (és más események) pedig ellenőrizzék a flaget, és ilyen esetbe egy queue-ba dobják be magukat.

A válasz mgérkezése és feldolgozása után ellenőrizheted a queue-t, és futtathatod az ott várakozó eseményeket.

Más: én sose használnám egy textbox onChange eseményét...
4

nem a koncepció a baj?

gex · 2009. Feb. 13. (P), 16.57
Az input mező onChange eseményre elküld a szervernek egy ajax hívást, hogy beállítson egy session változót. A szerver válaszát megjeleníti az oldalon.
én itt érzem a hibát. biztos, hogy ezt így kell csinálni?

hack megoldás: amikor elindul az onchange esemény akkor beállítod, hogy a link onclick-je ne futhasson le (ráakasztasz egy eseményt), és amikor visszakapod a választ, akkor újra kattinthatóvá teszed (leszeded róla az eseményt).