【发布时间】:2012-09-13 06:09:31
【问题描述】:
免责声明:我不是真正的开发人员,所以我可能在这里有一些代码意大利面......现在我需要使用我所拥有的,这意味着我最终可能会得到一个管道-磁带类型修复。 ;-)
我正在使用 Javascript 和 PHP 来执行以下操作:
- 在屏幕上闪烁一对图像
- “监听”并捕捉按键操作(用于指示左侧或右侧图像的特定按键)
- 重复 10 对图像
我通过让 Javascript 使用图像对更改 div 的可见性并调用事件侦听器来完成它,所有这些都是精确计时的。 “捕获”部分是通过使用 innerHTML 将 L 或 R 写入页面的表单区域来完成的。
这就是问题所在,如果有人在机会窗口期间错过了按键,我没有办法注意到。因此,在流程结束时提交表单之前,我不计算记录的响应。
我希望它在 10 个图像对结束时通知它,然后让用户重做会话,或者注意哪些图像对丢失并自动重新显示该对(或多对)。
这是我得到的代码,用于执行图像对闪烁和按键捕获。
<script type="text/javascript">
var randomPairList = <?php echo $_POST['topicNumber']-1; ?>;
function imgChoice(imgPair)
{
var imgDataR = '<input type="hidden" name="'+imgPair+'[<?php echo $_POST['topicNumber']; ?>]" value="r" />';
var imgDataL = '<input type="hidden" name="'+imgPair+'[<?php echo $_POST['topicNumber']; ?>]" value="l" />';
var noData = '<?php $noData = 1; ?>';
$(document).on('keydown', function(event)
{
if (event.keyCode == 67 || event.keyCode == 37)
{
document.getElementById(imgPair+'Data').innerHTML = imgDataL;
$(document).unbind('keydown');
}
if (event.keyCode == 77 || event.keyCode == 39)
{
document.getElementById(imgPair+'Data').innerHTML = imgDataR;
$(document).unbind('keydown');
}
});
//div = document.getElementById(imgPair);
}
function stopChoice(imgPair)
{
$(document).unbind('keydown');
}
function flashImages()
{
i=500;
//$('#startTopic').fadeOut(500);
setTimeout("document.getElementById('fullpd').style.cursor='none';",50);
setTimeout("document.getElementById('fullpd').style.background='#464646';",500);
for(x=1;x<imgPairs.length;x++)
{
setTimeout("document.getElementById('clickSound').play();",i+2000);
setTimeout('document.getElementById("'+imgPairs[x]+'").style.display="block";',i+3500)
setTimeout('imgChoice("'+imgPairs[x]+'");',i+3495)
setTimeout('document.getElementById("'+imgPairs[x]+'").style.display="none";',i+4000)
setTimeout('stopChoice("'+imgPairs[x]+'");',i+6000)
i=i+4000;
}
setTimeout("document.getElementById('fullpd').style.background='#eaeaea';",i+1000)
setTimeout("document.getElementById('fullpd').style.cursor='default';",i)
setTimeout(function() {$('#endTopic').fadeIn(1000);},i+1000);
}
</script>
所以,我想知道是否有一种方法可以保持对 event.keyCode 的简单计数,以便在最后调用另一个函数以确保它总共记录了 10 个事件,如果没有重新启动......或者一种专门跟踪错过哪个imagePair 的方法,然后自动重新运行这些对。
【问题讨论】:
-
听起来像认知心理学,真的很有趣。希望我知道更多的 javascript 来提供帮助。出于准备目的,我会一致地缩进您的代码。还有,这个
for(x=1;x<=imgPairs.length-1;x++)和for(x=1;x<imgPairs.length;x++)是一样的,后者稍微清晰一点。 -
那么,有没有人有其他想法?是否有一种“简单”的方法可以在javascript中添加某种记录的keyups计数,然后我可以在最后调用以检查是否记录了正确的数字?或者,我想我可以在两个主题的会话之间添加一个页面,并计算记录的 $_POST 值以确保有足够的......我只是希望能够让用户重做当前主题而无需单击首先通过。
标签: javascript php jquery jquery-events onkeydown