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()
,则只有第二个事件会触发并警告“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);