- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将 CustomEvent 合并到我的工作流程中。但我需要此事件以两种方式进行通信:脚本将事件发送到文档,并且它应该响应相同的发起者。
我试过以下方法:
ev = new CustomEvent('StorageRequest', {
detail: {
space: theSpace,
method: theMethod,
arguments: args
}
})
document.dispatchEvent(ev)
我的听众看起来像这样:
document.addEventListener('StorageRequest', (e) => {
console.debug('Sending StorageRequest', e)
// do something, then answer back with response
})
实现这个的方法是什么?
我试过使用 Promise 并使用 resolve/reject 发送响应,但是传递函数似乎破坏了事件中的 detail
,如果我尝试这样做,它会变成 null :
return new Promise((resolve, reject) => {
ev = new CustomEvent('StorageRequest', {
detail: {
space: theSpace,
method: theMethod,
arguments: args,
resolve, reject
}
})
document.dispatchEvent(ev)
})
Notes: I'd like to avoid "generically" sending the response back to the document. I prefer the requests and responses to be fully intentional and handled within the code properly
I don't have an element attached to this, so using the element frome.target
isn't an option (unless I can do something else with it)
最佳答案
您不能在 DOM 事件中“响应”- 它们只会向上传播 DOM 树,直到它到达顶层。
一个 promise 可能有效,设置正确,但你只能响应一次。一旦 promise 被解决/拒绝,您就不能再次解决或拒绝它,它将忽略后续的解决/拒绝调用。
作为替代方案,您可以设置 2 个单独的事件并响应第一个应该实现您正在尝试做的事情:
sReqEvent = new CustomEvent('StorageRequest', {
detail: {
space: theSpace,
method: theMethod,
arguments: args
});
console.debug('Sending StorageRequest');
document.dispatchEvent(sReqEvent);
听众:
document.addEventListener('StorageRequest', (e) => {
// do something, then answer back with response
var sRespEvent = new CustomEvent('StorageResponse', e.data);
console.debug('Sending StorageResponse', e.data);
document.dispatchEvent(sRespEvent);
});
document.addEventListener('StorageResponse', (e) => {
// This is my response
});
当然这是不必要的,您可以只使用从 StorageRequest 监听器中调用的“StorageResponse”函数...
另一种选择是使用 window.postMessage
,但是这更多地涉及到设置单独的来回请求,IE9 将只支持传递的字符串(你需要 JSON 编码/解码包在 IE9 中,如果你想发送除字符串以外的任何内容 - 可以,但如果你在所有浏览器中都这样做,作为一种全局解决方法,速度会更慢。
关于javascript - 带有响应的 CustomEvent,这可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46303820/
好吧,自从几天前的最后一个问题以来,我已经取得了一些进展,但在 Javascript 和 Three.js 方面我还是很陌生,并且正在遇到这个新问题。 我正在尝试将从 OBJ 文件加载的一些 thre
我知道我的问题并不新鲜,但是我在这里和Internet上找到的所有解决方案均不起作用:(或者,我做错了什么。 我需要在Dart和JS之间建立通信,并且我想使用事件,因为这个想法看起来很简洁。 因此,我
我创建了一个自定义元素: const templ = document.createElement('template'); templ.innerHTML = ` `; class SlideBu
我需要创建一个自定义事件,它将一些数据传递给事件监听器。我已经创建了一个像下面这样的 自定义事件 var event = new CustomEvent('store', { 'detail': ob
我正在尝试创建自定义 Javascript 事件。该事件正常运行并触发,但我传递给它的“详细信息”对象不可用。 这是我用来创建和发送事件的代码: var double_tap = new Custom
我在 azure Insights 中以自定义事件格式保存了数据。现在,我需要在我的网站中创建一个仪表板页面,该页面将从见解中提取数据并显示该数据的图表。问题是我如何根据自定义事件中保存的数据过滤数据
我在 azure Insights 中以自定义事件格式保存了数据。现在,我需要在我的网站中创建一个仪表板页面,该页面将从见解中提取数据并显示该数据的图表。问题是我如何根据自定义事件中保存的数据过滤数据
我在一个函数上有一个 CustomEvent 参数,我想检索事件的名称,即它是用 (new CustomEvent('foo')) 构造的字符串 为了引用 https://developer.mozi
我正在尝试将 CustomEvent 合并到我的工作流程中。但我需要此事件以两种方式进行通信:脚本将事件发送到文档,并且它应该响应相同的发起者。 我试过以下方法: ev = new CustomEve
每次单击附加不同数据的 div 时,我都需要触发一个自定义事件。 这是我的代码的一个简化变体 (JSFiddle): click me function selectItem(id) { v
我想测试是否CustomEvent constructor支持。 var ev; if (/* CustomEvent constructor supported? */) { ev = ne
我有以下代码块 $(function(){ var TaskEvent = new CustomEvent('TaskAdded',{ detail: {
我正在尝试为也支持 IE8 的 CustomEvent 制作一个 polyfill,这就是我想出的: if (typeof window.CustomEvent === "function") {
IE 不支持CustomEvent() 构造函数。是否可以使其至少与 IE11 兼容?它适用于其他浏览器,例如 Chrome 和 Firefox。 例如:- var SpecialEvent = ne
来自document.createEvent The createEvent method is deprecated. Use event constructors instead. 在bootst
根据(我的理解)documentation ,如果任何事件监听器在处理事件时调用 Event.preventDefault() 方法,则 dispatchEvent 方法应返回 false。但如果我尝
我正在尝试在 vanilla javascript 中创建自定义事件,但并不真正了解如何触发它。据我所知有jQuery方法trigger('customEvent') ,但它是如何在 Vanilla
我使用了很多自定义事件, typescript 静态检查中的一个盲点是 CustomEvent 中的细节类型.由于这个盲点,很多重构都会受到影响。为了弥补,我为 CustomEvent 创建了一个全局
我试图从 JS 中调用 Angular 函数,但是传递给 Angular 的参数未定义。我缺少什么?理想情况下,我也想从调度事件返回结果。我应该使用更好的解决方案吗? JS函数 var event
如何测试 CustomEvent 是否在 jasmine 中调度?当我尝试运行以下代码时,出现错误:“ReferenceError:找不到变量:CustomEvent”。 function testC
我是一名优秀的程序员,十分优秀!