由addEventListener注册的jQuery触发器mousedown

Sam*_*Sam 11 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');
Run Code Online (Sandbox Code Playgroud)

jsFiddle中的示例

我做了一些测试.

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

这里有什么不对吗?

谢谢.

PS之所以使用addEventListener(),是因为我想编写一个没有jQuery的库.

Okk*_*kky 9

尝试使用

EventTarget.dispatchEvent
Run Code Online (Sandbox Code Playgroud)

MDN链接

你的代码就像是

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

elem.dispatchEvent(new Event('mousedown'))
Run Code Online (Sandbox Code Playgroud)

fireEvent如果您正在考虑使用IE,则可能需要使用.

object.fireEvent(bstrEventName, pvarEventObject, pfCancelled) 
Run Code Online (Sandbox Code Playgroud)

MSDN链接

就像

if (document.createEvent) {
    element.dispatchEvent(event);
} else {
    element.fireEvent("on" + event.eventType, event);
}
Run Code Online (Sandbox Code Playgroud)


Mau*_*and 5

Jquery仅触发自己创建的事件

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

$(elem).on('mousedown', function () {
    alert('on');
});
$(elem).trigger('mousedown');
Run Code Online (Sandbox Code Playgroud)

但是下面的代码将无效

 $(elem).trigger('mousedown');
 $(elem).on('mousedown', function () {
    alert('on');
});
Run Code Online (Sandbox Code Playgroud)

看看这个DEMO FIDDLE

  • @Sam [小提琴](http://jsfiddle.net/mbanandetoro6/gWsfv/)这是你需要的吗? (3认同)
  • 但我尝试使用addEventListener注册click事件,并通过jQuery trigger()触发它,它的工作原理...... (2认同)