没有详细说明,我有一个带有翻转的 img,即鼠标移出/悬停将 img src 设置为隐藏的表单值(或者这可以在具有 global 变量的不同上下文中完成)。我使用了一些 javascript 来交换我的两个过/出图像值,并调用了被调用的 FireEvent( ElementId, "mouseover" ); 来触发变化。我的 javascript 在页面上隐藏/显示元素。这导致光标有时会在我用来触发事件的 img 上 - 这与我换出的那个相同,有时在单击后光标不在 img 上。
除非您退出并重新输入元素,否则鼠标悬停/移出不会触发,因此在触发我的事件后,鼠标悬停/移出需要“重新触发”以说明新的光标位置。这是我的解决方案。在我隐藏/显示各种页面元素并按照描述进行 img src 交换之后,我调用函数 RefreshMouseEvents( ElementId ) 而不是 FireEvent( ElementId, "mouseover" )。
这适用于 IE9(不确定其他浏览器)。
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 );
}
}
}