Ohne zu sehr ins Detail zu gehen, hatte ich ein img mit Rollovers, dh mouseout/overs, die den img src auf versteckte Formwerte setzen (oder dies könnte in einem anderen Kontext mit globalen Variablen getan haben). Ich benutzte etwas Javascript, um beide meiner over/out Bildwerte zu tauschen, und ich nannte den angerufenen FireEvent (ElementId, "mouseover"); um die Änderung auszulösen. Mein Javascript hat Elemente auf der Seite versteckt/angezeigt. Dies führte dazu, dass der Cursor manchmal über dem Bild lag, das ich zum Auslösen des Ereignisses verwendet hatte - das war das gleiche wie das, das ich auswechselte, und manchmal befand sich der Cursor nach dem Klick nicht über dem Bild.
MouseOver/out wird nur ausgelöst, wenn Sie ein Element verlassen und erneut eingeben. Nachdem mein Ereignis ausgelöst wurde, musste der Mouseover/-Ausgang neu getriggert werden, um die neue Cursorposition zu berücksichtigen. Hier ist meine Lösung. Nachdem ich verschiedene Seitenelemente ein-/ausgeblendet habe und mein img src-swapping wie beschrieben mache, rufe ich die Funktion RefreshMouseEvents (ElementId) anstelle von FireEvent (ElementId, "mouseover") auf.
Dies funktioniert in IE9 (nicht sicher über andere Browser).
function RefreshMouseEvents(ElementId)
{
FireEvent(ElementId, 'mouseover');
setTimeout("TriggerMouseEvent('" + ElementId + "')" , 1);
}
function TriggerMouseEvent(ElementId)
{
if(IsMouseOver(ElementId, event.clientX, event.clientY))
FireEvent(ElementId, 'mouseover');
else
FireEvent(ElementId, 'mouseout');
}
function IsMouseOver(ElementId, MouseXPos, MouseYPos)
{
if(document.getElementById(ElementId) != null)
{
var Element = document.getElementById(ElementId);
var Left = Element.getBoundingClientRect().left,
Top = Element.getBoundingClientRect().top,
Right = Element.getBoundingClientRect().right,
Bottom = Element.getBoundingClientRect().bottom;
return ((MouseXPos >= Left) && (MouseXPos <= Right) && (MouseYPos >= Top) && (MouseYPos <= Bottom))
}
else
return false;
}
function FireEvent(ElementId, EventName)
{
if(document.getElementById(ElementId) != null)
{
if(document.getElementById(ElementId).fireEvent)
{
document.getElementById(ElementId).fireEvent('on' + EventName);
}
else
{
var evObj = document.createEvent('Events');
evObj.initEvent(EventName, true, false);
document.getElementById(ElementId).dispatchEvent(evObj);
}
}
}
Sie jquery binden können –
Haben Sie versucht das? Das Ereignis onmouseover _should_ sollte auch aufgrund der Ereignisausbreitung auf dem übergeordneten Ereignis ausgelöst werden. –
ok ich habe nicht darüber nachgedacht, tut mir leid, es ist ein etwas schlechtes Beispiel, weil es in meiner App nicht wirklich verschachtelte Elemente sind. das obere div ist absolut über einer Reihe anderer Elemente positioniert. – fearofawhackplanet