DOM 事件不会在 DOM 元素中冒泡

DOM event does not bubble in off-DOM element

本文关键字:DOM 元素 事件      更新时间:2023-09-26

我有一个 DOM 元素,它还没有在 DOM 中,我想触发一个 DOM 事件。

事件不会冒泡。但是对于jQuery,它确实如此。这对我来说似乎很奇怪。

这种行为在 Safari 和 Chrome 中是可以重现的(在 Firefox 中它可以正常工作 — 事件冒泡):

var log = function(event) {console.log('Clicked on div', event);};
// Create DOM element.
var div = document.createElement('div');
// Don't append it to DOM. Though it works if we append it there.
// document.body.appendChild(div);
div.innerHTML = '<a id="outer"><span class="inner">yo</span></a>';
// Does not work.
div.addEventListener('click', log);
div.querySelector('#outer').click();
// Works!?
$(div).on('click', log);
$(div).find('#outer').click();

jQuery是否实现了自定义事件冒泡策略?是浏览器在这里错了吗?

编辑:创建了一个错误

我认为这与

$(div).find('#outer').click();

请注意,如果您选择以下情况

$("#outer").click();

它也不起作用。所以我的赌注是 JQ 也会触发div 元素的点击,而不是用 DOM 冒泡。