16

呼び出し_.debounce()により、関数は遅延後に 1 回ではなく複数回実行されます。_.debounce()指定された遅延の後に一度実行される関数を取得するにはどうすればよいですか? 私の使用例は、ユーザーが入力を停止した後に AJAX 要求を実行することです。

たとえば、入力に入力すると、1 秒後にコンソールにメッセージが表示されます。この例では、複数のメッセージが表示されます (入力した文字ごとに 1 つ)。メッセージを 1 つだけ表示するようにコードを変更するにはどうすればよいですか?

https://plnkr.co/edit/3dGm55ZFqWe4V59HLgoC

function onKeyUp() {
    _.debounce(() => {
        console.log('foo');
    }, 1000)();
}
<input onkeyup="onKeyUp()" />
4

1 に答える 1

32

キーアップイベントごとに新しいデバウンス関数を作成しています。代わりに、一度作成して、この関数を onKeyUp イベント ハンドラ内で (または代わりに) 使用する必要があります。

var handler = _.debounce(() => {
  console.log('foo');
}, 1000)

function onKeyUp() {
  handler();
}
<script src="http://underscorejs.org/underscore-min.js"></script>
<input onkeyup="onKeyUp()" />

于 2018-03-20T16:42:53.493 に答える