恢复箭头键的默认值

Restore default value of arrows key

我正在使用一个脚本 (impress.js),它将一些特定的操作绑定到左、右、上和下箭头的 keyup 和 keydown 事件。

在某些特定时刻(例如在文本区域中键入时),我想恢复箭头的默认行为。

我试过

但没有成功
$("a#show-ta").click( function() {      
  document.addEventListener("keydown", function ( event ) {
    if (event.keyCode >= 37 && event.keyCode <= 40) {
      return;
    }
  });
  document.addEventListener("keyup", function ( event ) {
    if (event.keyCode >= 37 && event.keyCode <= 40) {
      return;
    }
  }); 
}); 

其中 a#show-ta 是显示我的文本区域的按钮。

您想防止按键冒泡到(我假设)Impress 绑定其处理程序的文档:

$("textarea").on('keyup keydown keypress', function(e) {
  e.stopPropagation();
});

如果您需要特定区域(例如 texarea)中的事件,您应该像这样停止事件的传播:

$('textarea').keydown( function(ev) {
    ev.stopPropagation();
});

如果整个页面都需要事件,但您想在文本区域中排除事件,例如,您可以举起一个标志,您将在事件中验证该标志。

var keydownActivated = true;

$('textarea').keydown( function(ev) {
    if (keydownActivated) {
        ev.preventDefault();
        // dostuff
    }
});

这或多或少会让你到达目的地。创建一个标记来跟踪文本区域是否具有焦点,并在当前的按键事件处理程序中检查该标记。我看不到你所有的代码,所以这只是一个简单的例子:

var textareaHasFocus = false;

var textarea = document.querySelector('#yourTextarea');
textarea.addEventListener('focus', function(event) {
  textareaHasFocus = true;
}, false);

textarea.addEventListener('blur', function(event) {
  textareaHasFocus = false;
}, false);

document.addEventListener("keydown", function ( event ) {
  if (textareaHasFocus) return true;
  // your current keyboard handler
});
document.addEventListener("keyup", function ( event ) {
  if (textareaHasFocus) return true;
  // your current keyboard handler
});