event-handling 相关问题

事件处理是关于处理源与一个或多个订户之间的消息的编码样式。源中的点侦听器提供了一种方式,订阅代码可以使用从源引发的消息。

如何防止之前添加的事件监听器被调用?

我正在创建一个内容脚本作为浏览器扩展。 我希望更改某些页面的功能,因此我确定我需要停止某些事件。通常,一个人可以注册...

回答 1 投票 0

当一个函数定义在不同的文件中时,如何检查它是否存在?

我写了一些库代码来处理拖放。我想在几个项目中使用这个库(它定义了一些 CustomEvents)*。这些事件的处理程序可能是也可能不是

回答 0 投票 0

Invoke() 在处理 blazor 事件时被忽略

program.cs builder.Services.AddScoped(); 接收.cs 如果(内容类型==“”) { InstallServiceInfoReceived?.Invoke(this, (contentType, serverName, message...

回答 0 投票 0

删除在循环中创建的 Javascript 事件侦听器

我有一个包含多个相似元素的网站,需要应用事件监听器: 我有一个包含多个相似元素的网站,需要应用事件监听器: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Example</title> </head> <body> <a href = '#' class = "click_me">Click me</a> <br> <a href = '#' class = "click_me">Click me</a> <br> <a href = '#' class = "click_me">Click me</a> <script src = "example.js"></script> <script> new myClass(5); </script> </body> </html> 我通过遍历元素来做到这一点。我希望回调函数能够访问元素、父类实例和事件。所以我想我必须在循环中定义回调函数。但是,这使得很难删除事件侦听器。在这个例子中,我调用了 setUpEventHandlers 方法两次,第二次调用应该删除第一次调用创建的事件侦听器。但是,当我加载网页时,我可以在检查器中看到两组侦听器。我想这是因为在循环中重新定义了函数,所以没有被removeEventListener当作同一个函数。我怎样才能删除第一组听众? class myClass { // Class constructor. constructor(input_foo) { // Process input. this.foo = input_foo; // Create event listeners for this instance. this._setUpEventHandlers(); // Re-create event listeners (should remove previous ones). this._setUpEventHandlers(); }; // Loops over elements and creates event listeners. _setUpEventHandlers() { // Loop over elements. document.querySelectorAll('.click_me').forEach(element => { // Define event listener function with "this" bound and // appropriate signature. var onClickFunction = function(event) { this.onClick(element, event); }.bind(this); // Remove existing event listeners. element.removeEventListener('click', onClickFunction, false); // Add event listener function for this element. element.addEventListener( 'click', onClickFunction, false ); } ); } // Define event listener function. onClick(element, event) { event.preventDefault(); console.log(this); console.log(event); console.log(element); console.log('<br>'); } } 可以使用箭头函数来避免bind。您还可以通过访问 event.currentTarget 而不是传递对元素的引用来简化您的点击处理程序调用。因此,你可以这样做: class MyClass { constructor(input_foo) { this.foo = input_foo; this.onClickFunction = e => this.onClick(e); this._setUpEventHandlers(); this._setUpEventHandlers(); }; _setUpEventHandlers() { document.querySelectorAll('.click_me').forEach(element => { element.removeEventListener('click', this.onClickFunction); element.addEventListener('click', this.onClickFunction); }); } onClick(event) { event.preventDefault(); console.log(this.constructor.name); console.log(event.constructor.name); console.log(event.currentTarget.constructor.name); console.log(event.currentTarget.innerText); console.log('<br>'); } } let obj = new MyClass(); <div class="click_me">hello</div> <div class="click_me">world</div> 我调整了您的代码,使其按您的预期工作。 它对你不起作用的原因是因为永远不会保存对回调方法处理程序的引用。 必须使用与用于实例化新事件的完全相同的处理程序来删除事件。在您的情况下,您引用了一个调用事件处理程序方法的匿名函数,并且您不能重新引用匿名函数。试试这个: class myClass { // Class constructor. constructor(input_foo) { // Process input. this.foo = input_foo; // Create event listeners for this instance. this._setUpEventHandlers(); // Re-create event listeners (should remove previous ones). this._setUpEventHandlers(); }; // Loops over elements and creates event listeners. _setUpEventHandlers() { // when onClickFunction is called, the HTML element that triggered the click and the Event object are automatically passed to the function, no need to specifically define them as arguments let onClickFunction = this.onClick; // Loop over elements. document.querySelectorAll('.click_me').forEach(element => { // Remove existing event listeners. element.removeEventListener('click', onClickFunction, false); // Add event listener function for this element. element.addEventListener( 'click', onClickFunction, false ); } ); } // Define event listener function. onClick() { event.preventDefault(); console.log(this); // references the element that triggered the event console.log(event); // references the Event object that was triggered console.log('<br>'); } } 在您的代码中,每次调用 _setUpEventHandlers 方法时,以下行都会创建一个新的匿名函数: var onClickFunction = function(event) { this.onClick(element, event); }.bind(this);

回答 2 投票 0

C# Winforms Tray App:如何通过托盘事件打开/关闭或显示/隐藏表单?

我有一个带有事件处理程序的托盘应用程序。每当事件被触发时,我想通过相应的弹出图像通知用户状态。此图像应在 ...

回答 1 投票 0

我可以在亚马逊 s3 事件中使用前缀和后缀作为正则表达式吗?

当名为 ABC-XXXX-input.csv 的文件加载到存储桶中时,我需要运行我的事件,其中 XXXX 是一个数字并且是可变的。 所以我认为我需要做的就是正确完成公关...

回答 0 投票 0

在不同管道中重用消费者的架构建议

我们有一个应用程序可以处理各种管道建模真实世界的工作流,每个管道由多个不同的消费者组成。例如,在 Pipeline 1 中,我们可能有 Consumer...

回答 0 投票 0

如何借助枚举在 Rust 中创建事件发射器和处理程序

我正在寻找一种方法来发出事件并处理生锈的事件 枚举事件{ 消息(字符串), 频道(i64), 断开连接(i16), 连接(JSON), 心跳 } 我想列出...

回答 0 投票 0

如何在 flutter google map 上创建自定义标记

如何在 flutter google map 上创建自定义标记然后获取有关单击标记的信息。获取标记 ID 的示例。 在搜索这个问题时,我得到了关于如何创建自定义 ...

回答 0 投票 0

使用 DDD 或不使用 DDD 的清洁架构

我有一个关于清洁架构/DDD 的问题。如果我使用的模型没有两个服务——命令和查询,但我在一个服务中有它们,那么使用事件是否有意义?我不...

回答 0 投票 0

如何防止连续调用 web 服务时的互锁

如下贴代码所示,方法onStandardRotationPeriodChange绑定到.html文件中的button clikc。对于那个按钮,用户可能连续快速地点击它,wh...

回答 0 投票 0

我的钩子检测 onClick,防止 onChange

我做了一个钩子来检测组件的内部和外部点击 const useDetectClick = ( 参考:RefObject, insideClick: () => void, outsideClick: () => 无效 ) =>...

回答 0 投票 0

使用 import 运行函数的加载程序问题

我已经使用这段代码很长时间了,但是,我仍然不知道为什么代码仍然没有从加载程序中找到运行,这是我的加载程序,也是我的 build.js .. .

回答 1 投票 0

在调用异步函数之前是否有任何理由等待 DOM 内容加载?

我正在学习 Javascript,而 VSC 只是建议我让我的 fetchElements 函数异步并自动为我更改它,但我正在查看我在哪里调用它,它似乎......

回答 0 投票 0

在 WPF 中从元素上的操纵器和子元素上未处理的操纵器旋转和缩放

我在网格中有一个自定义用户控件,两者都具有 IsManipulationEnabled = true。 UserControl(的某些部分)的单指操作应该适用于 UserControl(翻译那些

回答 0 投票 0

Blazor 服务器 StateHasChanged 触发器 InvalidOperationException

我在 Blazor Server 应用程序的 StateHasChanged 调用中遇到 InvalidOperationException。 该应用程序有一个主布局组件,其中包含多个子组件。每个组件注册...

回答 0 投票 0

监听事件,例如在 JavaScript 中添加新元素 [重复]

我需要创建一个事件侦听器,以便在将新元素添加到文档或其任何子元素时调用我的事件处理程序。 任何想法如何使用?

回答 3 投票 0

nextLevel 函数不会在 LeftSide 的最后一个子级上的点击事件上执行

编辑:让我解释一下这个项目是什么。我必须制作一个游戏,玩家必须点击左侧不存在的面部;基本上是多余的脸。我可以...

回答 2 投票 0

React 在接收到多个同时发生的事件后如何重新呈现是否有明确的行为?

假设我有一个 React 组件,它可以接收多个事件,这些事件在一次交互后执行状态更改,如下所示: const {useRef, useState} = React; 功能应用程序(){ 常量...

回答 1 投票 0

简化例程以更快地运行

我在下面有这个更改事件宏 宏的目的是为输入的项目准备报价主文件。 要在 B15 开始的单元格中输入的数据(用于项目编号)和...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.