Javascript 等待按键并超时

Javascript 等待按键并超时,javascript,keypress,Javascript,Keypress,在我正在编码的一个实验中,在每次试验中,我都需要显示一个刺激(搜索数组),然后等待最长5秒钟,让受试者用按键做出反应。如果按下一个键,下一次试验将立即开始,否则将在5秒钟后开始 我只是想知道我是否可以用JavaScript编写类似的代码,如果可以,我应该如何编写实验代码?此外,我应该能够存储所按下键的标识和时间戳。 <script> var timeout; timeout = setTimeout(next, 5000); //execute function "next" af

在我正在编码的一个实验中,在每次试验中,我都需要显示一个刺激(搜索数组),然后等待最长5秒钟,让受试者用按键做出反应。如果按下一个键,下一次试验将立即开始,否则将在5秒钟后开始

我只是想知道我是否可以用JavaScript编写类似的代码,如果可以,我应该如何编写实验代码?此外,我应该能够存储所按下键的标识和时间戳。


<script>
var timeout;

timeout = setTimeout(next, 5000); //execute function "next" after 5000 miliseconds

//With jQuery
//$("#element").on("keypress", function(){ clearTimeout(timeout); next();} );

//Without jQuery
function elementOnKeypress()
{
clearTimeout(timeout); //don't execute "next" after 5000 (or less) ms
next(); //run "next"
}

function next() 
{ 
//your code ..
}
</script>
<element onkeypress="elementOnKeypress();"></element><!-- element is your html-element to be keypressed -->
var超时; 超时=设置超时(下一步,5000)//5000毫秒后执行功能“下一步” //使用jQuery //$(“#元素”).on(“按键”,function(){clearTimeout(timeout);next();}); //没有jQuery 功能元素按键() { clearTimeout(超时);//在5000毫秒(或更短)后不执行“下一步” next();//运行“next” } 函数next() { //你的代码。。 }
据我所知,你的实验流程如下:

  • 显示刺激
  • 反复检查按键
  • 如果5秒钟过去了,显示下一个刺激
  • 若按键被按下,将按键存储在数组中,然后显示下一个刺激
  • 为此,我将使用一个JS库来捕获输入

    你首先要定义你的刺激

    例如:

    var stimuli = ["Apple","Orange","Keira Knightley","Banana"];
    
    然后,您需要设置
    事件
    侦听器。这些将记录您的按键操作

    var listener = new window.keypress.Listener();
    var results = [];
    listener.simple_combo("shift s", function() {
        results.push("You pressed shift and s");
    });
    
    然后你要设置计时系统。我将使用
    setInterval()
    函数增加主题在数组中的位置

    var pos = -1; //Arrays start at 0, and you want to run this function to start.
    function nextStim() {
        pos = pos + 1;
        myDiv.innerHTML = stimuli[pos]
    }
    var results = [];
    listener.simple_combo("shift s", function() {
        results.push("The stimulus was: " + stimuli[pos] + "And you pressed Shift + S" );
    });
    setInterval(nextStim,5000);
    

    这肯定会奏效的。您很可能会使用和检测mousedown会更容易请为代码添加解释,并注意使用全局变量请解释$(“#元素”)的含义,因为当我执行此代码时,我得到一个错误:未捕获引用错误:$未定义。我还尝试用文档或元素句柄(如画布)替换它。我对javascript有点陌生;如果你能容忍我,多解释一点,我会非常感激的。