ClientX/Y bei onclick auf <option> ist falsch
cs
- javascript
Hi,
ich habe zunächst ein Popup, welches absolute positioniert ist und mit DragDrop Funktion ausgestattet ist.
Bei jedem Klick aufs document soll das Popup schließen, außer wenn der Klick innerhalb des Popups selber liegt.
=>
document.onclick = ClosePopup;
In closePopup frage ich das event nach der MausPosition ab und überprüfe ob der Klick innerhalb des Popups liegt. Wenn nein: schließen. Das klappt auch alles wunderbar soweit.
In diesem Popup befindet sich auch ein <select>.
Klicke ich das select und klicke ich dann eine <option> an, dann schließt das Popup, obwohl ich angenommen hätte, dass das event die richtige Mausposition (innerhalb des Popups) hat.
Im debugger hab ich aber leider gesehen, dass wenn ich eine <option> anklicke das event als clientX und clientY sehr geringe werte hat. Es scheint, dass die linke obere Ecke der runtergeklappten Auswahlliste mit 0/0 belegt ist. Demnach denkt ClosePopup dass der Klick von außerhalb kam und schließt das Popup.
Hat jemand eine Idee dazu wieso das so ist? screenX ist weiterhin ein normaler Wert, aber der hilft mir ja nicht weiter.
Danke und Gruß!
cs
Moin!
Wenn ich das vorhin bei meinen onclick Experimenten (in einem ganz anderen Zusammenhang) richtig gesehen habe, dann wird der Klick auf das Option Element durchgereicht auf alle darunterliegenden Elemente.
Ich kann es gerade in meiner (wieder mal unübersichtlich gewordenen) Bookmarkliste nicht finden, aber es gibt eine Möglichkeit, wie du dieses "chaining" abbrechen kannst. Du mußt dazu einen onclick Handler für Dein select oder option Element definieren, das das event "verschluckt", also nicht weiter durchreicht.
-- Skeeve
Hi,
du meinst mit cancelBubble oder stopPropagation() !?!?
Ist dennoch umständlich. und hatte schon genug Probleme damit. hatte erst alle Klicks die vom Popup-Div kommen gecancelt. Klappte auch soweit, nur dann kommen auch keine Button Klicks mehr durch (und somit triggern die ASP.NET events auf der Serverseite auch nicht mehr). Daher musste ja auch die andere Lösung her.
Gerade hab ich es so gelöst in meiner ClosePopup Methode, dass abgefragt, wenn das event von der select box kommt, dass er dann das popup auch nicht schließen soll.
aber das beantwortet dennnoch nicht meine Frage wieso clientX nicht der wahrheit entspricht.
liegt es daran, dass ein Parent der selectbox absolut ist? (für das dragdrop-able Popup) ?
Mfg
Moin!
Wenn ich das vorhin bei meinen onclick Experimenten (in einem ganz anderen Zusammenhang) richtig gesehen habe, dann wird der Klick auf das Option Element durchgereicht auf alle darunterliegenden Elemente.
Ich kann es gerade in meiner (wieder mal unübersichtlich gewordenen) Bookmarkliste nicht finden, aber es gibt eine Möglichkeit, wie du dieses "chaining" abbrechen kannst. Du mußt dazu einen onclick Handler für Dein select oder option Element definieren, das das event "verschluckt", also nicht weiter durchreicht.
-- Skeeve
hi,
Im debugger hab ich aber leider gesehen, dass wenn ich eine <option> anklicke das event als clientX und clientY sehr geringe werte hat. Es scheint, dass die linke obere Ecke der runtergeklappten Auswahlliste mit 0/0 belegt ist.
Passiert das in allen Browsern - oder nur im IE?
Im IE gehört Select zu den sog. "windowed Controls" - und die haben halt so ihre Eigenarten (bekannteste Auswirkung: z-index "funktioniert" nicht).
Mit dem von Skeeve angesprochenen Thema - Stichworte: Eventbubbling, Events canclen - erreichst du das gewünschte vermutlich besser, als über die Abfrage der Position.
gruß,
wahsaga
Hi.
Passiert das in allen Browsern - oder nur im IE?
Im Gegenteil. Im IE klappts. Im FF nicht.
Im IE gehört Select zu den sog. "windowed Controls" - und die haben halt so ihre Eigenarten (bekannteste Auswirkung: z-index "funktioniert" nicht).
kenn ich. aber das hier hat wohl andere gründe.
Mit dem von Skeeve angesprochenen Thema - Stichworte: Eventbubbling, Events canclen - erreichst du das gewünschte vermutlich besser, als über die Abfrage der Position.
jo, events canceln hatte ich vorher drin. siehe dazu meinen anderen Post (Klick events vom Popup wurden nicht weitergeleitet, somit wurde nur außerhalb des Popups geschlossen). Aber 2 Gründe (der eine wegen dem ASP Event) sprachen dagegen.
MfG!
Passiert das in allen Browsern - oder nur im IE?
Im Gegenteil. Im IE klappts. Im FF nicht.
stimmt, http://forum.de.selfhtml.org/archiv/2007/2/t145662/#m945524 das ist ein Bug.
Struppi.