jQuery $ .on()没有监听自定义本机js事件

时间:2014-06-12 19:29:49

标签: javascript jquery

我正在尝试让jQuery监听一个不是由jQuery触发的事件。

以下是听众:

 $(document).on("end.eTime", function (e) {
   console.log("here");
   $("body").append(e.name + " " + e.ellapsed + "<br>");
 });

这是触发器:

var event= new CustomEvent('end.eTime', {custom: object})
document.dispatchEvent(event);

使用最新的firefox进行测试。

如果我使用jQuery的触发器触发它工作正常,但我正在尝试编写纯js库。

如果我尝试使用本机监听器进行监听,它可以正常工作,但我希望允许我的库用户使用jQuery。

有谁能告诉我为什么jQuery $ .on()不想听原生自定义事件?

更新

所以我删除了@Derek建议的命名空间,然后jquery将正确地监听它。我相信这是一个错误,所以我在这里提交了它:http://bugs.jquery.com/ticket/15143

我还发现,正如预期的那样,本机监听器无法听到jquery事件。正如@kcent所说,他们使用了一个完全不同的过程,所以难怪它不起作用。文档说它仍然调用本机事件,但这可能仅适用于点击之类的事情。这对我来说并没有影响这个过程,但我仍然在票中提到如果它有效会很好。

对于一系列示例,您可以在jquery上查看故障单。

2 个答案:

答案 0 :(得分:1)

jQuery使用它自己的内部事件注册表来跟踪所设置的事件&amp;触发。因此,当您使用本机JS创建自定义事件时,它会侧重于该模式并且jQuery不了解它。

如果你想同时支持这两种方法,你可能需要创建一些在本机JS和jQuery中注册监听器的自定义事件方法。

如果您担心的话,IE9下方也不提供旁注CustomEvent

有关自定义活动的精彩参考:http://www.sitepoint.com/javascript-custom-events/

答案 1 :(得分:1)

我觉得这与命名空间声明有关。如果我将事件命名为“eTime&#39;而不是&#39; end.eTime&#39;。

话虽如此,为什么不使用jQuery来触发事件呢?