Javascript 发送带有数据的事件
我想调度一个事件,该事件将向侦听该事件的任何事件侦听器传递一些数据 考虑触发事件的函数:Javascript 发送带有数据的事件,javascript,events,custom-events,Javascript,Events,Custom Events,我想调度一个事件,该事件将向侦听该事件的任何事件侦听器传递一些数据 考虑触发事件的函数: function click() { const x = 'foo' document.dispatchEvent(new CustomEvent('clicked')) } click() 如何将自定义数据传递给事件侦听器 document.addEventListener('clicked', function(e) { console.log(x) // logs "foo" })
function click() {
const x = 'foo'
document.dispatchEvent(new CustomEvent('clicked'))
}
click()
如何将自定义数据传递给事件侦听器
document.addEventListener('clicked', function(e) {
console.log(x) // logs "foo"
})
可能您正在查找
事件详细信息
new CustomEvent('eventName', {'detail': data})
您可以使用event.detail访问x,而不是使用x和in-event listener来访问数据
function getSelectionBounds() {
var x = (bounds["x"].toFixed(2));
var y = "xyz";
var selectionFired = new CustomEvent("selectionFired", {
"detail": {"x":x,"y":y }
});
document.dispatchEvent(selectionFired);
};
document.addEventListener("selectionFired", function (e) {
alert(e.detail.x+" "+e.detail.y);
});
不幸的是,
CustomEvent
无法在IE上工作(在Edge之前),但您只需使用普通的事件即可
只需考虑<代码>事件是一个对象,因此您可以添加您需要的所有自定义属性:
event.X = "foo";
通过这种方式,您可以检查与事件相关的回调函数上的自定义字段
注意。对于旧IE版本,您需要此polyfill用于新事件
错过的功能:
var event;
if(typeof(Event) === 'function') {
event = new Event(EVENT_NAME);
}else{
event = document.createEvent('Event');
event.initEvent(EVENT_NAME, false, false);
}
@NicholasKyriakides这在所有浏览器中都会发生吗?请使用我的建议更新您的代码,或者创建一个fiddle@NicholasKyriakides“警报在我更新的代码中显示了什么。@NicholasKyriakides检查我更新的答案中的多个变量我认为你详细忘记了a},但除此之外,它就像一个符咒。再次感谢