javascript - 如何只触发一个事件 'change' 或 'click'

标签 javascript html vue.js event-handling

我有一个数字输入标签,上面有两个事件监听器“on-click”和“on-change”。当我点击箭头时,它会触发两者。我想先触发一个而不删除任何事件监听器。 单击快速更改事件不会触发,直到它失去输入标签的焦点(如果我只保留更改事件)。如果我只保留点击事件,那么我将无法捕获更改事件。

<input type="number" @click="function()" @change="function()" />

最佳答案

使用 Observables。您可以将它们视为事件流。对输出进行去抖动应该会得到您想要的结果。

var event_a = Rx.Observable.fromEvent(document, 'mousemove'); 
var event_b = Rx.Observable.fromEvent(document, 'click'); // or in this case (input_element, 'click')

var debounce_ms = 100;
var debounced_event = merge(event_a, event_b).debounceTime(debounce_ms);

去抖动步骤会删除指定时间间隔内发生的多个事件。如果两个事件(或同一事件的多个副本)在不到 100 毫秒内发生,则只会发出一个事件。

关于去抖动 Observables:https://www.learnrxjs.io/operators/filtering/debouncetime.html

上面的例子使用了与你不同的事件;只需调整它即可收听您想要的任何事件。最后,订阅 Observable,并在那里调用相关的事件处理代码:

debounced_event.subscribe(() => {
    // do event handling things here
});

要在您的页面上使用 Observables,请在某处包含 rx.js。这是从 CDN 加载它的示例代码。

<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.5.1/rxjs.umd.js"></script>

关于javascript - 如何只触发一个事件 'change' 或 'click',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55865887/

相关文章:

javascript - 如何使用 ChartJS 创建圆 Angular 矩形

javascript - Vue 绑定(bind)单击添加事件类(并从最后一个类中删除)

node.js - 为什么Chrome无法设置Cookie

html - 如何使contaning div不影响父div上的悬停

javascript - 通过ajax存储数据然后访问该URL

javascript - 创建带有粗斜体、下划线按钮的文本区域

javascript - 用JS给div添加自动刷新

php - 使用 MySQL 和 PHP 在 CSV 文件上传时动态创建表

javascript - 如何创建 javascript 函数对象并获取其内部属性

javascript - 有没有办法在 CronJobs 中获取毫秒数?