如何检测网站上是不是按下了退格键?

Posted

技术标签:

【中文标题】如何检测网站上是不是按下了退格键?【英文标题】:How can I detect if backspace is pressed on the site?如何检测网站上是否按下了退格键? 【发布时间】:2021-11-20 14:26:56 【问题描述】:

我目前正在制作一个简单的在线文本编辑器网站。而且我无法检测到退格键被按下。 这是代码: html

<!DOCTYPE html>
<html>

<head>
    <link rel="stylesheet" href="cssfile/style.css">
    <title> Code Editor </title>
    <script src="jsfile/main.js"></script>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>

<body>
    <div class="navdiv"></div>
    <div id="board" class="board">

    </div>
</body>

</html>

js: 这是我的主要代码:

document.addEventListener("keypress", function (event) 
    console.log(event.key)
    if (event.key == "Enter") 
        document.getElementById("board").innerText += '\n'
     else 
        document.getElementById("board").innerText += event.key
    
);

这是我的代码,我试过了

if(event.key == "Backspace")

但这没有用。

【问题讨论】:

当您按下退格键时,您的console.log 行记录了什么? 有用吗? ***.com/questions/2353550/… @Jamiec 不,我试过它没有用。这让我很困惑 @AntonyNg 嗨,我也尝试了这些方法,但没有一个有效。 【参考方案1】:

你很接近。

您正在使用keypress,而您应该使用keyup(或者keydown,如果您想在按键完成之前知道)。

KeyPress 事件仅针对字符(可打印)键调用,KeyUp 和 KeyDown 事件针对所有包括不可打印的键(如 Control、Shift、Alt、BackSpace 等)引发。

试试这个:

document.addEventListener("keyup", function(event) 
  console.log(event.key);
  if (event.key === "Backspace") 
    document.getElementById("board").innerText += '\n'
   else 
    document.getElementById("board").innerText += event.key
  
);

【讨论】:

是的,我现在明白了,感谢您的帮助 随时!如果此答案有帮助,请不要忘记接受! 接受了这个答案【参考方案2】:

keypress 事件 has been deprecated 并且您的浏览器不支持它。请改用keydown

document.addEventListener("keydown", function (event) 
    console.log(event.key)
    if (event.key == "Backspace") 
        document.getElementById("board").innerText += '\n'
     else 
        document.getElementById("board").innerText += event.key
    
);

【讨论】:

是的,我对答案投了赞成票【参考方案3】:

keypress 事件已弃用,仅在按键产生字符值时触发。因此,在您的情况下,它不会被退格触发。

您应该使用keydown 事件。

【讨论】:

感谢您的支持。【参考方案4】:

2021 年更新:使用 keyupevent.key

❌不好

keydown 让您知道何时按下该键,但会在任何操作发生之前触发。 event.keyCode 既难以解释(数字代表字母和所有),deprecated

✅很好

keyup 在退格事件发生后触发(即一个字符被删除),就像 keypress event.key 既是 universally supported 又是 not deprecated
<form>
  <label>Foo:
    <input name="foobar" placeholder="ex: foobar" />
  </label>
</form>
document.querySelector('input[name="foobar"]').addEventListener('keyup', function (ev) 
  console.log(ev.key);
  if ("Backspace" == ev.key) 
    console.log("It's a backspace!!");
  
)

【讨论】:

【参考方案5】:

您可以使用event.keyCode == 8

document.addEventListener("keydown", function(event) 
  console.log(event.keyCode);
  if (event.keyCode == 8) 
    document.getElementById("board").innerText += '\n'
   else 
    document.getElementById("board").innerText += event.key
  
);

KeyCode 文档:

https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode#constants_for_keycode_value

【讨论】:

32 是空格键的键码。 8 用于退格.. 我发现我必须使用 keydown 而不是 keypress 但仍然感谢您的帮助

以上是关于如何检测网站上是不是按下了退格键?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用jQuery捕获退格键? [复制]

前端javascript如何阻止按下退格键页面回退 但 不阻止文本框使用退格键删除文本

如何在条目控件为空时检测退格键

按下退格键时颤振“.Where”过滤器不更新

有啥方法可以在运行时屏蔽进入 jText 区域的值,如果一直按下退格键,应该清除内容

UITextView:输入退格键时字符数不正确