Javascript JS计算器指南,不断获取;“未定义”;
我正在遵循一个用JavaScript制作计算器的指南,但我仍停留在第一个练习上。它一直说,Javascript JS计算器指南,不断获取;“未定义”;,javascript,Javascript,我正在遵循一个用JavaScript制作计算器的指南,但我仍停留在第一个练习上。它一直说,e没有定义。当我定义它时,它总是说“key”没有定义。如果我试图定义它,我会得到ReferenceError:在初始化之前无法访问词法声明key'` 代码如下: const calculator = document.querySelector(`.calculator`) const keys = calculator.querySelector(`.calculator__keys`) keys.
e
没有定义。当我定义它时,它总是说“key”没有定义。如果我试图定义它,我会得到ReferenceError:在初始化之前无法访问词法声明
key'`
代码如下:
const calculator = document.querySelector(`.calculator`)
const keys = calculator.querySelector(`.calculator__keys`)
keys.addEventListener(`click`, e => {
if (e.target.matches(`button`)) {
// do something
}
})
const key = e.target
const action = key.dataset.action
if (!action) {
console.log('number key!')
}
if (
action === 'add' ||
action === 'subtract' ||
action === 'multiply' ||
action === 'divide'
) {
console.log('operator key!')
}
if (action === 'decimal') {
console.log('decimal key!')
}
if (action === 'clear') {
console.log('clear key!')
}
if (action === 'calculate') {
console.log('equal key!')
}
您正在尝试访问click事件处理程序回调之外的
e
<代码>e表示事件。单击特定元素时,将创建该事件对象并将其传递给回调函数。在外部访问该事件将抛出一个错误。将's'更改为',这不是必需的,但我还建议将e放入()。但主要的一点是,您的代码需要在事件处理程序中,否则“e”在该上下文之外没有任何意义
这样做:
const calculator = document.querySelector('.calculator')
const keys = calculator.querySelector('.calculator__keys')
keys.addEventListener('click', (e) => {
if (e.target.matches('button')) {
const key = e.target
const action = key.dataset.action
if (!action) {
console.log('number key!')
}
if (
action === 'add' ||
action === 'subtract' ||
action === 'multiply' ||
action === 'divide'
) {
console.log('operator key!')
}
if (action === 'decimal') {
console.log('decimal key!')
}
if (action === 'clear') {
console.log('clear key!')
}
if (action === 'calculate') {
console.log('equal key!')
}
}
});
提示:使用引号而不是平铺键。此外,如何在处理程序外部定义e.target?
const key=e.target
超出了事件回调的范围,因此JS不知道什么是e
。你需要把这个放在你的回叫里。你能不能也把你的信寄出去HTML@NickParsons我遵循的整个指南。我不知道它的范围,我们目前正在讲座中讨论这个问题,但我总是通过这样做来学习。谢谢觉得很奇怪他这么做了though@dux8啊,我明白了。他们可能犯了一个错误,当时没有意识到