【发布时间】:2021-03-14 05:58:33
【问题描述】:
在 32:50 的 this talk 中,演讲者显示以下代码:
const nextClick = new Promise(resolve => {
link.addEventListener('click', resolve, { once: true });
});
nextClick.then(event => {
event.preventDefault();
// Handle event
});
他解释了为什么它会阻止 click 事件的默认操作,因为它是由用户交互直接引起的,而不是在调度是程序化的情况下,例如link.click()。有没有一种简单的方法可以让它在后一种情况下与前一种情况一样工作?
编辑以详细说明动机
@Kaiido 在 cmets 中问我(或者更确切地说是演讲者)为什么在这里使用 Promise - 我假设他想建议直接将调用 preventDefault 的函数附加为事件侦听器。如果我想使用 Promise.all 或其他组合器将它与其他 Promise 组合起来,则 Promise 很方便。
【问题讨论】:
-
event.preventDefault();总是被调用,但如果以编程方式调度事件,它不会阻止默认操作。链接的视频解释了原因。 -
once无关紧要。不同的是,当用户点击link时,click事件的默认动作被阻止,而link.click()被执行时则不然。 -
上面的 cmets 是针对一个显然删除了他的 3 cmets 和他的答案以及我对此的评论的人。
-
视频好像说明了一切,还有什么不明白的地方?为什么必须使用 Promise?
-
@Kaiido,如果我想使用 Promise.all 或其他东西将它与其他承诺结合起来,这个承诺很方便。视频只是陈述问题,解释行为,但没有提供解决方案。
标签: javascript promise dom-events event-loop web-scripting