13

我正在尝试创建一个自定义 Javascript 事件。该事件正常工作并触发,但我传递它的“详细信息”对象不可用。

这是我用来创建和调度事件的代码:

var double_tap = new CustomEvent("doubleTap", {
    detail: {
        hello: 'world'  
    },
    bubbles: true,
    cancelable: true
});

this.dispatchEvent(double_tap);

然后我使用 jQuery 向正文添加事件侦听器:

$('body').on('doubleTap', function( e ) { 
    console.log(e);
});

它确实会触发,并且控制台日志会发生,但不幸的是,该日志仅输出事件详细信息,包括气泡和可取消属性,而不会输出“详细信息”对象,因此无法访问该信息。

这里以 jsbin 为例,我在 body 的 click 事件上创建事件,这样你就可以看到控制台;http://jsbin.com/looseroots/6

我希望能够在事件触发时从“详细信息”对象中获取数据。我究竟做错了什么?我已经在 Chrome 和 iOS 上的 Safari 中对此进行了测试。

4

3 回答 3

17
obj.addEventListener("eventName", function(e) {
console.log(e.your_property)
})

var event = new CustomEvent("eventName");
event.your_property = { key: "value" };

obj.dispatchEvent(event);

您可以在发送时在您的 CustomEvent 中创建属性。

于 2016-02-10T15:42:09.190 回答
13

您需要访问 originalEvent 属性以获取详细信息

console.log(e.originalEvent.detail);
于 2012-11-11T18:03:09.603 回答
2

我发现了以下提交:https ://github.com/jquery/jquery/commit/a90ff8c8c79bfcc32afd340a12f016f20a31d8b6

这个修复在 jQuery 的compat分支中,应该从 jQuery 3.0 开始修复。

于 2015-02-05T05:16:09.500 回答