Keydown效果,如果效果完成之前的keyup则发出警报

时间:2012-09-11 01:01:36

标签: javascript jquery keydown keyup

我的目标:在效果发生时按住空格键(模拟指纹扫描)。如果用户在效果完成之前释放键,我想显示确认消息。 keydown部分工作正常并继续执行“process”功能,但如果在效果完成之前释放它,则keyup上不会显示任何错误消息。这就是我的......

var active = false;

$(document).one("keydown", function(e) {
    if ((e.keyCode == 32) && (active == false)) {
      active = true;
      $(".panel_1").slideDown(5000, function() {
        active = false;
        $(".panel_1").slideUp(2000, function() {process(); })
      }); 
    }
});

$(document).one("keyup",function(e) {
    if ((e.keyCode == 32) && (active == true)) {
      var r=confirm("Oops! You must HOLD down the space key until scan is complete. Press OK to try again, or Cancel to return to homepage.");
      if (r==true) {
        reset();
      }
      else {
        window.location.replace("home.html");
      } 
    }
});

2 个答案:

答案 0 :(得分:0)

确认您在第一个slideDown动画期间释放了该键。根据你的代码,一旦它开始向上滑动,你的active将设置为false,然后使它成为keyup事件不会触发。

另外作为旁注,我建议在JavaScript中使用triple =。

答案 1 :(得分:0)

您的代码似乎在这里工作:http://jsfiddle.net/D52eq/但请注意,只有在效果的.slideDown()阶段释放空格键时才会出现确认消息 - 您正在设置active = false; 之前 .slideUp()来电。

如果您希望在完成整个动画和process()调用之前释放空格键进行确认,请尝试以下操作:

$(document).one("keydown", function(e) {
    if ((e.keyCode == 32) && (!active)) {
      active = true;
      $(".panel_1").slideDown(5000).slideUp(2000, function() {
         process();
         active = false;
      })
    }
});

请注意,您只需将.slideDown().slideUp()链接起来,就不需要向.slideDown()提供回调函数。此外,我已将active == false替换为!active

演示:http://jsfiddle.net/D52eq/1/