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)。你可以找个例子here。毫不奇怪,IE 使用不同的机制来执行相同的操作,您需要调用火灾事件.
这是现代浏览器的非跨浏览器示例(摘自上面的 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);