2013-08-11 1 views
0

Приведенный ниже код работает «правильно» только с одной проблемой. Всякий раз, когда срабатывает событие keyup, целевые ключи все еще продолжают реагировать на любые события с клавиатурой или keydown, в то время как все остальные клавиши становятся неактивными. Похоже, что мне не хватает какой-то неотвязности, но не могу понять. Я пробовал off() и unbind(), но безуспешно.На клавиатуре замораживаются другие ключевые события

Предполагается, что если эти клавиши нажаты, они запускают запуск, но все остальные клавиши не должны замерзать.

var delta = 500; // time interval since the last keyup event 
var lastKeypressTime = 0; // double enter flag set  
$(this).on("keyup", function (event) { 
event.preventDefault(); 
    if (event.keyCode == 37) 
    { 
     $(' a.left').css("opacity", "0.5").trigger('click'); 
    } else if (event.keyCode == 39) 
    { 
     $(' a.right').css("opacity", "0.5").trigger('click'); 
    } 
    else if (event.keyCode == 13) 
    { 
     var thisKeypressTime = new Date(); 
     $(' div div.active a.readon').focus(); 
     if (thisKeypressTime - lastKeypressTime <= delta) 
     { 
      $(' div div.active a.readon')[0].click(); 
      thisKeypressTime = 0; 
     } 
     lastKeypressTime = thisKeypressTime; 
    } 
}); 
+0

В каком контексте «это»? Это целая страница? Включает ли оно очень большое количество элементов в своей области? – DevlshOne

+1

@DevlshOne спасибо, но вдруг я просто понял это. Event.preventDefault(); неправильно помещается внутри метода. Поместив его в условную проверку, ключи больше не замерзают, а другие продолжают работать так, как должны. – McRui

+1

Молодцы. В зависимости от размера области «this» я собирался предложить 'event.stopPropagation();' – DevlshOne

ответ

0

Так нашел проблему, которая вызывает нежелательное поведение, перемещая event.preventDefault(); от до условного, чтобы внутри него в ключах, которые должны быть предотвращены по умолчанию.

var delta = 500; // time interval since the last keyup event 
var lastKeypressTime = 0; // double enter flag set  
$(this).on("keyup", function (event) { 
    if (event.keyCode == 37) 
    { 
     event.preventDefault(); 
     $(' a.left').css("opacity", "0.5").trigger('click'); 
    } else if (event.keyCode == 39) 
    { 
     event.preventDefault(); 
     $(' a.right').css("opacity", "0.5").trigger('click'); 
    } 
    else if (event.keyCode == 13) 
    { 
     var thisKeypressTime = new Date(); 
     $(' div div.active a.readon').focus(); 
     if (thisKeypressTime - lastKeypressTime <= delta) 
     { 
      $(' div div.active a.readon')[0].click(); 
      thisKeypressTime = 0; 
     } 
     lastKeypressTime = thisKeypressTime; 
    } 
});