jQuery には、DOM のイベント登録とは別の独自のイベント登録システムがあります。を呼び出すと$(something).click()
、登録済みのすべての jQuery ハンドラと登録済みのonclick
ハンドラが起動しますが、それ以外は起動しません。例えば、
document.body.addEventListener('click', function() { alert('event') }, false);
document.body.onclick = function() { alert('onclick'); };
$('body').click(); // alerts "onclick"
を呼び出すとdocument.body.onclick()
、2 番目のイベントのみが発生し、「onclick」と警告されます。両方のイベントを発生させるには、イベント オブジェクトを作成し、問題の要素 (この場合は body) にディスパッチします。ここで例を見つけることができます。当然のことながら、IE は別のメカニズムを使用して同じことを行うため、fireEventを呼び出す必要があります。
これは、最新のブラウザーの非クロスブラウザーの例です (上記の MDC の記事から引用)。
var clickEvent = document.createEvent('MouseEvents');
clickEvent.initMouseEvent('click', true, true, window,
0, 0, 0, 0, 0, false, false, false, false, 0, null);
document.body.dispatchEvent(clickEvent);