【问题标题】:To have a function triggered when up and down key is pressed?按下向上和向下键时触发功能?
【发布时间】:2017-05-13 17:50:28
【问题描述】:

我想要它,所以当按下向上或向下键时,它会触发不同的功能。到目前为止,这是我的代码:

window.addEventListener('keypress', function(e) {

    console.log("A Key has been pressed");

    /*Sets "key" variable to be the value of the key code of the key pressed*/
    var key = e.which || e.keyCode;

    /*checks if key pressed is the "up" key*/
    if (key === 38){
            functionOne();
            console.log("Up key was Pressed");
        }

    /*checks if key pressed is the "down" key*/     
    else if (key === 40){
            functionTwo();
            console.log("Down key was Pressed");
        }
    })

每当我按下除箭头键、shift、alt、caps、tab 和 f1 - f12 之外的任何键时,都会激活控制台日志,显示“已按下一个键”。这可能是什么原因造成的?

先谢谢你了。

【问题讨论】:

  • 您如何验证事件正在触发?在事件回调本身中放置一个 console.log - 永远不要假设它正在触发。如果是,下一步是检查key 的值是多少。基本调试。
  • 谢谢你的好建议,我会根据结果添加并编辑问题。
  • 你用什么浏览器来测试这个?
  • Chrome 网络浏览器

标签: javascript function if-statement addeventlistener keycode


【解决方案1】:

改用keyup 事件。

onkeypress 事件不会针对所有浏览器中的所有键(例如 ALT、CTRL、SHIFT、ESC、箭头)触发。要仅检测用户是否按下了某个键,请改用onkeydown 事件,因为它适用于所有键。

window.addEventListener('keyup', function(e) {
var key = e.which || e.keyCode;
    console.log(key);
    if (key === 38){
        console.log("Up key was Pressed", key );
    }    
    else if (key === 40){
        console.log("Down key was Pressed", key );
    }
    e.preventDefault();
})

【讨论】:

  • 什么是“e.preventDefault();”做什么?
  • 另外,感谢您的回答,但似乎没有解决它
  • e.preventDefault(); 例如,这在以下情况下很有用:单击“提交”按钮,阻止其提交表单单击链接,阻止链接跟随 URL
  • @HugoStiles 很高兴为您提供帮助
猜你喜欢
  • 1970-01-01
  • 2017-07-07
  • 2013-11-28
  • 1970-01-01
  • 2021-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多