Javascript 从事件侦听器获取值并将其应用于全局变量
如果这个标题让人困惑,我很抱歉,让我解释一下。我正在创建一个刽子手游戏来提高我的HTML/CSS/Javascript技能。HTML/CSS是完整的,功能齐全,但问题在于我的javascript 基本上,我的javascript是这样工作的: 用户单击开始按钮,游戏功能开始。游戏开始后,用户可以键入一封信并单击“提交”。用户的输入应该更新全局变量userInput,但它不会更新。如果我的理解是正确的(环顾堆栈溢出不确定我的问题的确切措辞),这是无法做到的,因为javascript的异步和作用域性质。这是正确的吗?如果没有,有什么建议可以让它工作吗Javascript 从事件侦听器获取值并将其应用于全局变量,javascript,Javascript,如果这个标题让人困惑,我很抱歉,让我解释一下。我正在创建一个刽子手游戏来提高我的HTML/CSS/Javascript技能。HTML/CSS是完整的,功能齐全,但问题在于我的javascript 基本上,我的javascript是这样工作的: 用户单击开始按钮,游戏功能开始。游戏开始后,用户可以键入一封信并单击“提交”。用户的输入应该更新全局变量userInput,但它不会更新。如果我的理解是正确的(环顾堆栈溢出不确定我的问题的确切措辞),这是无法做到的,因为javascript的异步和作用域性
let userInput = '';
function getValue(e) {
e.preventDefault();
userInput = document.getElementById('inputText').value.toLowerCase();
form.addEventListener('click', form.reset());
//console.log(userInput); <-- works
}
function hangMan(e) {
submit.addEventListener('click', getValue);
const word = getWords(words);
const MAX_ATTEMPTS = word.length + 3;
console.log(userInput) <-- does not
let attempt = 0;
let win = false;
dashedWord = getWordBlanks(word);
wordBlanks.innerHTML = dashedWord;
while (attempt <= MAX_ATTEMPTS && win === false) {
let checkedWord = checkAndReplaceCharacter(word, dashedWord, userInput);
if (checkedWord === word) {
win = true;
} else {
wordBlanks.innerHTML = checkedWord;
}
attempt += 1;
}
}
function main() {
startButton.addEventListener('click', hangMan);
}
main();
让userInput='';
函数getValue(e){
e、 预防默认值();
userInput=document.getElementById('inputText').value.toLowerCase();
addEventListener('click',form.reset());
//log(userInput);异步和作用域似乎很好。
您可以从事件侦听器内部更改全局变量
console.log(userInput)是在某个地方定义的startButton
吗?你的while
循环将完全运行,而不会给用户时间输入内容。将大部分代码放在getValue
中,而不是放在前面游戏初始化属于函数hangMan()
但是,游戏逻辑应该属于getValue()
注意,每次单击开始,都会向按钮submit
添加一个事件侦听器对不起,是的,开始按钮在顶部:const startButton=document.getElementById('start'))致力于把代码放在正确的位置——如果我能让它工作或不工作,我会做出回应。