由addEventListener注册的jQuery触发器mousedown

我想通过jQuery trigger()方法模拟假mousedown事件,并通过本机javascript方法注册mousedown事件 – addEventListener()。 我发现它无法触发……

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

jsFiddle中的示例

我做了一些测试。

  1. 通过jQuery注册mousedown事件()
    • 结果:有效
  2. 通过addEventListener()注册click事件
    • 结果:有效

这里有什么不对吗?

谢谢。

PS使用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仅触发自己创建的事件

甚至订单也很重要: 这个作品

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

但下面的代码将无法正常工作

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

看看这个DEMO FIDDLE