假设HTML元素如下所示:
<a onClick={() => console.log("side effect that needs to fire before the redirect"} href="yourlink.com">Click me</a>
这里onClick事件在用户被重定向之前被执行。这是一直都是这样的吗?或者这是未定义的,或者这取决于浏览器?
jtoj6r0c1#
总是这样吗......是的,事件的默认操作(如跟踪链接)(如果有)在调用事件处理程序之前不会被触发,这主要是因为事件处理程序可以通过对事件对象调用preventDefault来防止它发生。但是要注意,当页面离开时,(几乎)所有未完成的 * 异步 * 工作都将被终止,因此您的事件处理程序不能(例如)向服务器发送标准 AJAX 请求;当处理程序返回时,该工作仍在进行中,并将在页面被拆除时终止。(beacon是一个例外。)
preventDefault
1条答案
按热度按时间jtoj6r0c1#
总是这样吗......
是的,事件的默认操作(如跟踪链接)(如果有)在调用事件处理程序之前不会被触发,这主要是因为事件处理程序可以通过对事件对象调用
preventDefault
来防止它发生。但是要注意,当页面离开时,(几乎)所有未完成的 * 异步 * 工作都将被终止,因此您的事件处理程序不能(例如)向服务器发送标准 AJAX 请求;当处理程序返回时,该工作仍在进行中,并将在页面被拆除时终止。(beacon是一个例外。)