我正在尝试让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上查看故障单。
答案 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来触发事件呢?