由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中的示例
我做了一些测试。
- 通过jQuery注册mousedown事件()
- 结果:有效
- 通过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