由addEventListener注册的jQuery触发器mousedown

时间:2014-06-23 02:52:19

标签: javascript jquery javascript-events

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

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

Sample in jsFiddle

我做了一些测试。

  1. 通过 jQuery on()注册mousedown事件
    • 结果:工作
  2. 通过addEventListener()注册单击事件
    • 结果:工作
  3. 这里有什么问题吗?

    感谢。

    P.S。使用addEventListener()的原因是我想编写一个没有jQuery的库。

2 个答案:

答案 0 :(得分:9)

尝试使用

EventTarget.dispatchEvent

MDN link

您的代码将类似于

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 link

就像

if (document.createEvent) {
    element.dispatchEvent(event);
} else {
    element.fireEvent("on" + event.eventType, event);
}

答案 1 :(得分:5)

Jquery仅触发自己创建的事件

即使订单也很重要,例如:此作品

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

但是代码无效

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

看看这个 DEMO FIDDLE