如何移除由外部脚本绑定的事件监听器

How to remove event listeners bound by external script

本文关键字:绑定 事件 监听器 脚本 外部 何移      更新时间:2023-09-26

我有一个'黑盒'类型的ASP框架,假设我不能修改它。但是我可以给它添加HTML模块。我使用AJAX制作了HTML模块,用于用户登录和获取数据。问题是我需要拦截登录表单的提交事件。然后它必须调用web service,返回令牌并在页面重新加载之前将其存储在cookie中。

首先我需要阻止页面重新加载。我需要解绑定导致重载的事件。但如何?我没有权限访问绑定事件的代码。这不是我的。

我能够附加我自己的事件处理程序提交按钮,登录和密码字段。它们完成了自己的工作——它们启动了应该执行登录过程的AJAX请求。好吧,至少它们尝试了一下,因为几乎总是在AJAX调用完成之前就终止了它,页面重新加载,并且我的模块没有到那时应该有的令牌。大约20次调用中有1次成功,所以看起来是可能的。

如果有一种方法可以在AJAX回调完成之前防止页面重新加载,那么它可能已经足够工作了。

是否绝对没有办法杀死我没有绑定在我的代码中的事件?

好吧,我已经找到了实现目标的方法,而无需实际解除任何事件的绑定。我需要用'#'替换表单动作属性,与特殊提交链接href('#')相同,并且…完成了!在我的AJAX调用完成(或失败)之后,它恢复原始的href并提交淘气的表单。

所以我问的问题是错的——是我的错。我需要防止表单被提交,这比删除外星事件更容易!

TL;DR -先杀死hrefs,然后恢复它们:)