【问题标题】:Debugging help needed: Prevent backspace from navigating back需要调试帮助:防止退格键向后导航
【发布时间】:2015-08-15 22:22:06
【问题描述】:

我有一个webapp,它使用退格键来实现自己的目的。我一直有以下函数,在 document.keyup 上调用,多年来一直没有问题:

function keyupKeys (evt) {
  if(this.activeElement.id == 'q') return true; //ignore input to the search box
  if(!evt) var evt = window.event;
  var code = evt.keyCode;

  //handle special keys:
  switch(code) {
    case  9: // tab
    case 39: // right arrow
      press('colon'); break;
    case 37: // left arrow
      press('colon');
      press('colon'); break;
    case 13: // enter
      press('eq'); break;
    case  8: // backspace
      press('bs'); break;
    case 46: // delete
    case 144:// numpad clear
      press('c'); break;
    case 27: // esc
      press('ac'); break;
    default: // Not a key this function handles
      return true;
  }
  return false;
};

最近,我发现当按下退格键时,Windows 中的 Chrome 和 Linux 中的 Chromium 已经开始向后导航。过去并非如此。我还没有测试其他浏览器。

关于 SO 的相关问题导致我修改了退格的情况:

case  8: // backspace
  if(evt.preventDefault) evt.preventDefault();
  press('bs'); break;

但是,此更改没有任何效果。此外,由于浏览器正在向后导航,我无法使用 Javascript 控制台中的任何调试工具,所以我不知道发生了什么。

谁能解释发生了什么并提出解决方法?

【问题讨论】:

  • 您在哪个版本的 Chrome 中发现问题?您的网络应用似乎可以使用退格键。
  • @MaximillianLaumeister:我目前使用的是 Chromium 版本 43.0.2357.130 Ubuntu 14.04。本周早些时候,我第一次在我的工作机器 Windows 7 上发现了这个问题。我不知道 Chrome 版本,但它设置为自动更新。
  • 我知道的唯一技巧是在页面上选择一些东西,并确保在页面加载时它有focus,文本框效果很好。否则,不要拿走我的退格键
  • 有趣。我的Chrome版本是44.0.2403.155(64位),供参考。
  • 不要var evt - 只需使用您在函数参数中声明的evt

标签: javascript google-chrome backspace


【解决方案1】:

您应该收听keydown,而不是keyup 事件。

【讨论】:

    【解决方案2】:

    阅读this answer 让我认为问题可能是由于在 keyup 而不是 keydown 上调用我的函数引起的。我清楚地记得很久以前我第一次编写这段代码时,我使用 keyup 来解决某种问题;我不再记得是什么了。无论如何,我创建了以下名为onkeydown 的函数。看来问题已经解决了。

    function keydownKeys(evt) {
      if(this.activeElement.id == 'q') return true; //ignore input to the search box
      if(!evt) var evt = window.event;
      var code = evt.keyCode;
      if(code == 8) {
        if(evt.preventDefault) {
          evt.preventDefault(); //kill backspace triggering back button
        }
        return false;
      }
      return true;
    }
    

    【讨论】:

      猜你喜欢
      • 2010-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多