问题 由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. 注册mousedown事件 jQuery on()
    • 结果:有效
  2. 寄存器 点击 addEventListener()事件
    • 结果:有效

这里有什么不对吗?

谢谢。

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


2911
2018-06-23 02:52


起源

嗨,谢谢你的回答。但我真的不明白。为什么不起作用?据我所知,jQuery触发器可以执行附加在指定事件上的处理程序。但是这个样本没有。这是jQuery的限制吗?或者我误解了什么?再次感谢。 - Sam
通过阅读文档可以很容易地找到答案 jQuery.trigger, “任何事件处理程序附加 .on()或其快捷方法之一 被触发“,无处可说 trigger() 将触发原生事件! - adeneo
developer.mozilla.org/en-US/docs/Web/Guide/Events/... - adeneo
jsfiddle.net/AUPAh/2 - adeneo
很遗憾jQuery不支持触发本机事件,因为我们可以使用 dispatchEvent 触发本机事件,但实际的解决方案(跨浏览器工作)并不简单,所以如果jQuery解决了跨浏览器问题会更好。但是,您可以尝试编写自己的插件并重新使用它。 - King King


答案:


尝试使用

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'))

你可能不得不使用 fireEvent 如果你正在考虑IE。

object.fireEvent(bstrEventName, pvarEventObject, pfCancelled) 

MSDN链接

就像

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

9
2018-06-23 03:39



奇怪的是,它没有奏效。这个工作 - stackoverflow.com/a/18631561/566092 - coding_idiot


Jquery仅触发自己创建的事件

即使订单也很重要: 这个作品

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

但是下面的代码将会 不行

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

看看这个 DEMO FIDDLE


5
2018-06-23 02:59



但我尝试使用addEventListener注册click事件,并通过jQuery trigger()触发它,它的工作原理...... - Sam
@Sam让我检查,如果你已经完成它,给我一个演示链接 - Maulik Anand
jsfiddle.net/AUPAh/1 - Sam
@Sam 小提琴  这是你需要的吗? - Maulik Anand
@Sam看起来像 trigger() 只能触发一些有限的事件,比如它可以触发 onclick 事件但无法触发 onmousedown 事件 - King King