Приведенный ниже код работает «правильно» только с одной проблемой. Всякий раз, когда срабатывает событие 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;
}
});
В каком контексте «это»? Это целая страница? Включает ли оно очень большое количество элементов в своей области? – DevlshOne
@DevlshOne спасибо, но вдруг я просто понял это. Event.preventDefault(); неправильно помещается внутри метода. Поместив его в условную проверку, ключи больше не замерзают, а другие продолжают работать так, как должны. – McRui
Молодцы. В зависимости от размера области «this» я собирался предложить 'event.stopPropagation();' – DevlshOne