Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 与事件关联的setTimeout函数_Javascript_Jquery - Fatal编程技术网

Javascript 与事件关联的setTimeout函数

Javascript 与事件关联的setTimeout函数,javascript,jquery,Javascript,Jquery,当用户在我的输入中输入1秒后的数字时,我希望能够调用我的setTimeout函数 但问题是,我希望此事件只调用一次,例如,当用户在不到1s的时间内输入3数字,如200 如果用户输入3个数字(如200),我下面的代码将被调用3次 $('input.amount').on('input.amount',function(e){ setTimeout(function() { // code }, 1000); }); 因此,

当用户在我的输入中输入1秒后的数字时,我希望能够调用我的setTimeout函数

但问题是,我希望此事件只调用一次,例如,当用户在不到1s的时间内输入3数字,如200

如果用户输入3个数字(如200),我下面的代码将被调用3次

    $('input.amount').on('input.amount',function(e){

        setTimeout(function() {
            // code
        }, 1000);
    });

因此,我希望此代码只调用一次

您可以保留一个变量,告诉您用户是否已经键入了字符。然后,仅在变量尚未设置时触发函数。例如:

   var started = false;
   $('input.amount').on('input',function(e){
        if(!started){
            started = true;
            setTimeout(function() {
                // code
                started = false;//to reset so that further typing will trigger again
            }, 1000);
        }
   });

我会采取的一种方法是将执行延迟到最后一次输入后1000毫秒

var timer;
$('input.amount').on('input.amount', function (e) {
    if (timer) {
        clearTimeout(timer);
    }
    timer = setTimeout(function () {
        // code
        timer = undefined;
    }, 1000);
});

@如果在第一个超时完成之前触发第二个输入事件,那么第一个超时将被取消,然后我们将创建一个新的超时…谢谢,我认为您的解决方案更适合我的情况。您的解决方案是我问题的答案,但当我看到@ArunPJohny的解决方案时,它更适合,因为事件直到最后一次输入时才会触发,即使用户花5秒在输入中输入值