Keydown事件在Javascript中不起作用

领域

我正在尝试为一个基本的计算器工作。我尝试附加一些事件,以便用户van使用ENTER来获取结果,并使用退格键返回。但是,键盘事件不起作用。

我也不明白为什么按下C将其清空时,它会出现在屏幕框中。

可能是什么问题?

我做了一个小提琴:https : //jsfiddle.net/9gvbd2nt/1/

const screen = document.getElementById('screen');
let screenValue = '';
const allowed = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '(', '=', '-', '/', '*', '+', ')', 'C'];

document.querySelectorAll('button').forEach((b) => {
    b.addEventListener('click', (e) => {
        let button = e.target.innerText;
        if (screenValue == '' && allowed.splice(11, 15).includes(button)) {
            console.log('Invalid Character: ' + button)
        }
        if (button === 'C') {
            screenValue = '';
            screen.value = screenValue;
        }
        if (button === '=') {
            evalTest(screen.value);
        } else {
            screenValue += button;
            screen.value = screenValue;
        }
        screen.focus();
    })
})

document.addEventListener("keydown", (e) => {
    if (e.key === 13) {
        e.preventDefault;
        evalTest(screen.value);
    }
    if (e.key === 8) {
        e.preventDefault;
        screenValue = screenValue.slice(-1);
        screen.value = screenValue;
    }
})

function evalTest(value) {
    const regex = new RegExp('[0-9\/\*\)\(\+\-\=\%]*')
    if (value.match(regex)[0] == value) {
        screen.value = eval(value);
    } else {
        alert('Illegal Operation');
    }
}
贝尔科宾

更改e.keye.whiche.keyCode

document.addEventListener("keydown", (e) => {
    if (e.which === 13) {
        e.preventDefault;
        evalTest(screen.value);
    }
    if (e.which === 8) {
        e.preventDefault;
        screenValue = screenValue.slice(-1);
        screen.value = screenValue;
    }
})

更新:whichkeyCode财产已被弃用。您不应使用ASCII值来检查key属性,而只能使用键名:

document.addEventListener("keydown", (e) => {

  if (e.key === "Enter") {
    e.preventDefault;
    evalTest(screen.value);
  }
  if (e.key === "Backspace") {
    e.preventDefault;
    screenValue = screenValue.slice(-1);
    screen.value = screenValue;
  }
})

如果您以后想检查其他值,则这是键值列表:

https://developer.mozilla.org/zh-CN/docs/Web/API/KeyboardEvent/key/Key_Values

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Keydown事件在ListView中不起作用

来自分类Dev

Javascript'keydown'事件监听器不起作用

来自分类Dev

从jquery元素中删除keydown事件不起作用

来自分类Dev

keydown事件在引导的Firefox插件中不起作用

来自分类Dev

jQuery Keydown事件在Chrome中不起作用

来自分类Dev

C#:KeyDown事件在控件中不起作用

来自分类Dev

jQuery Keydown事件在Chrome中不起作用

来自分类Dev

KeyDown(),sendKeys()在硒中不起作用

来自分类Dev

KeyDown不起作用

来自分类Dev

验证对 Jquery 中的 Kendo Grid UI 的 KeyDown 事件不起作用

来自分类Dev

KeyDown事件键不起作用-VB.net

来自分类Dev

KeyDown事件键不起作用-VB.net

来自分类Dev

Javascript-onerror事件在Firefox中不起作用

来自分类Dev

JavaScript事件在IE 8中不起作用

来自分类Dev

Javascript按键事件在Firefox中不起作用

来自分类Dev

javascript click事件在div onclick中不起作用

来自分类Dev

JavaScript Canvas 在 onchange 事件中不起作用

来自分类Dev

KeyDown不起作用,Swift

来自分类Dev

Javascript更改keyup和keydown上的颜色不起作用

来自分类Dev

Javascript事件处理程序不起作用

来自分类Dev

Javascript-onclick事件不起作用

来自分类Dev

Javascript onclick事件不起作用

来自分类Dev

JavaScript事件处理程序不起作用

来自分类Dev

JavaScript拖曳事件不起作用

来自分类Dev

Javascript mouseout事件不起作用

来自分类Dev

Javascript 按钮事件不起作用

来自分类Dev

jQuery keyup,keydown在多行表中不起作用

来自分类Dev

jQuery keyup,keydown在多行表中不起作用

来自分类Dev

OnClick事件在jQuery中不起作用