Javascript 中的某种事件范围?

Some kind of Event scoping in Javascript?

提问人:yellephen 提问时间:10/25/2021 更新时间:10/25/2021 访问量:30

问:

我正在使用 javascript 和 jquery asp.net 运行。我有一些在文档就绪上运行的 javascript,它使用 jquery 通过 .on 函数分配一些 onclick 事件。没关系。我还有一个部分视图,该视图在一些需要相同功能的用户输入后加载,因此我在部分视图中再次引用脚本,导致文档就绪函数再次触发,并在部分视图中为我的控件分配 onclick 事件。那行得通。除了问题是我在主页上的控件收到两个 onclick 事件,如果我在加载部分视图后单击主页控件,则该事件会触发两次。我尝试在jquery循环中添加一个.off()以在添加事件之前删除该事件,以便在第二次运行时删除第一个事件并添加一个新事件,但该事件不会被删除。我还尝试重写它以使用遵循相同模式的 .addEventListener 和 .removeEventLister;在添加之前删除,但得到相同的结果。

如果我可以查询当前附加的事件侦听器,我可以轻松阻止 onclick 事件的第二次添加,但我的研究表明,在 javascript 中没有办法做到这一点(尽管您可以在 chrome 开发工具中使用 getEventListeners())。

那么,为什么当我执行 .off() 或 .removeEventListener() 时它不删除第一个事件呢?是否有某种像我调用两次的脚本这样的范围,它最终是脚本的两个实例,并且您无法删除由另一个脚本应用的事件侦听器?这只是一个猜测。

任何指导都会有用,谢谢。

JavaScript jQuery asp.net 事件

评论

1赞 Randy Casburn 10/25/2021
这是一个“沃尔多在哪里”的问题,不知道沃尔多的细节,沃尔多穿什么,沃尔多长什么样子,沃尔多是什么性别等等。我们都可以猜到,直到我们运气好,但我不确定这是 SO 的目的。请尽最大努力制作一个最小的可重复示例
0赞 yellephen 10/25/2021
所以没有某种事件范围界定吗?
0赞 chipit24 10/25/2021
@yellephen 检查是否适合您吗?事件冒泡,该比较将检查触发事件 () 的元素是否与将事件侦听器附加到 () 的元素相同。然后,您可以调用 ;这实质上会将事件范围限定为特定元素/目标。不过,请仔细阅读这些条款,以确保您不会做出意想不到的事情。通常,您不希望像这样“限定”事件的范围。event.target === event.currentTargettargetcurrentTargetevent.stopPropagation()
0赞 Randy Casburn 10/25/2021
@chipit24 - OP 造成了内存泄漏 - 您的建议加剧了问题。
0赞 chipit24 10/25/2021
对我来说,这听起来不像是内存泄漏,但我同意,OP 的情况很难诊断并提供有意义的答案。我更是盲目地写下我的想法来回应标题与正文中写的内容。

答: 暂无答案