詳細には入りませんが、ロールオーバー、つまり、img src を非表示のフォーム値に設定するマウスアウト/オーバーを含む img がありました (または、gloabl 変数を使用して別のコンテキストで実行できた可能性があります)。いくつかの JavaScript を使用して、画像のオーバー/アウト値の両方を交換し、呼び出された FireEvent( ElementId, "mouseover" ); を呼び出しました。変更をトリガーします。私のJavaScriptは、ページ上の要素を非表示/表示していました。これにより、イベントをトリガーするために使用した画像の上にカーソルが置かれることがありました。これは、スワップアウトしていたものと同じで、クリック後にカーソルが画像の上にないこともありました。
要素を終了して再入力しない限り、マウスオーバー/アウトは発生しないため、イベントがトリガーされた後、新しいカーソル位置を考慮するためにマウスオーバー/アウトに「再トリガー」が必要でした。これが私の解決策です。さまざまなページ要素を非表示/表示し、説明に従って img src スワッピングを行った後、FireEvent( ElementId, "mouseover" ) の代わりに関数 RefreshMouseEvents( ElementId ) を呼び出します。
これは 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 );
}
}
}