addEventListener注册的jQuery触发器mousedown

jQuery trigger mousedown registered by addEventListener

本文关键字:触发器 mousedown jQuery 注册 addEventListener      更新时间:2023-09-26

我想用jQuery trigger(方法模拟假mousedown事件,用原生JavaScript方法addEventListener()注册mousedown事件。我发现它无法触发:

elem.addEventListener('mousedown', function () {
    alert('addEventListener');
});
$(elem).on('mousedown', function () {
    alert('on');
});
$(elem).trigger('mousedown');

jsFiddle 中的样本

我做了一些测试。

  1. 通过jQuery on()注册mousedown事件
  • 结果:工作
  1. 通过addEventListener()注册click事件
  • 结果:工作

这里有什么问题吗?

附言:我之所以使用addEventListener(),是因为我想写一个没有jQuery的库。

尝试使用

EventTarget.dispatchEvent

MDN链路

您的代码将类似

var elem = document.getElementById('square');
elem.addEventListener('mousedown', function () {
    alert('addEventListener');
});
$(elem).on('mousedown', function () {
    alert('on');
});
elem.dispatchEvent(new Event('mousedown'))

如果您正在考虑IE,则可能必须使用fireEvent

object.fireEvent(bstrEventName, pvarEventObject, pfCancelled) 

MSDN链接

就像

if (document.createEvent) {
    element.dispatchEvent(event);
} else {
    element.fireEvent("on" + event.eventType, event);
}
Jquery只触发自身创建的事件

即使是订单也很重要,比如:this Works

$(elem).on('mousedown', function () {
    alert('on');
});
$(elem).trigger('mousedown');

但以下代码将不起作用

 $(elem).trigger('mousedown');
 $(elem).on('mousedown', function () {
    alert('on');
});

看看这个DEMO FIDDLE