运行javascript函数并在5秒后停止或满足条件?

时间:2015-01-16 01:11:38

标签: javascript loops timer

我需要编写一个纯JavaScript函数,该函数只执行5秒钟,并且如果满足以下任一条件(以先到者为准)将停止

  1. 已经过了5秒
  2. 用户输入了字段
  3. 我只能做条件2,但无法弄清楚如何在5秒后打破循环:

    function beginScanningForItemVer2(){
        var userInput= false;
        var element;
        while (!userInput){
            element = document.getElementById("input").value;
            if (element != null){
                userInput= true;
            }
        }
    }
    

    编辑:

    谢谢大家帮助我。请继续帮助我...... 我似乎无法使用while循环来检测用户输入,因为我的CPU使用率在循环时非常快。有没有办法完成这两个?请帮帮我

2 个答案:

答案 0 :(得分:0)

Javascript往往是非常面向回调的,因为默认情况下,页面上的所有Javascript都在单个线程中运行,这意味着在其他代码忙于运行时UI不响应。因此,您可能希望注册一个回调函数,而不是在函数中循环并在每个循环中查找输入,当您的输入元素发生更改时将调用该函数 - 例如,onchange侦听器将运行您的回调每当元素的值发生变化时。如果用户在5秒钟后输入内容,您可以在5秒后取消注册此回调以阻止任何事情发生。

稀疏示例(引用http://www.w3schools.com/jsref/event_onchange.asp):

// Set a function to be called when the value of the input element changes.
object.onchange = function() { 
  valueAfterChange = document.getElementById("input").value;
  // Do something with valueAfterChange.
}

// window.setInterval calls a function after a set delay.
window.setInterval(function() { 
  object.onchange = null;
  // Anything else you might want to do after 5 seconds.
}, 5000);   // Call this function after 5000 milliseconds == 5 seconds.

答案 1 :(得分:-1)

<强> Eddited

您可以将setIntervalsetTimeout结合起来解决问题。您的代码将如下所示。

var interval = setInterval(function() {
    var userInput= false;
    var element;
    while (!userInput){
        element = document.getElementById("input").value;
        if (element != null){
            userInput= true;
        }
    }
}, 1000);

setTimeout(function() {
    clearInterval(interval);
}, 5000)

您可以在此处查看更多信息。欢呼声。

https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers