Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从事件侦听器获取值并将其应用于全局变量_Javascript - Fatal编程技术网

Javascript 从事件侦听器获取值并将其应用于全局变量

Javascript 从事件侦听器获取值并将其应用于全局变量,javascript,Javascript,如果这个标题让人困惑,我很抱歉,让我解释一下。我正在创建一个刽子手游戏来提高我的HTML/CSS/Javascript技能。HTML/CSS是完整的,功能齐全,但问题在于我的javascript 基本上,我的javascript是这样工作的: 用户单击开始按钮,游戏功能开始。游戏开始后,用户可以键入一封信并单击“提交”。用户的输入应该更新全局变量userInput,但它不会更新。如果我的理解是正确的(环顾堆栈溢出不确定我的问题的确切措辞),这是无法做到的,因为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'))致力于把代码放在正确的位置——如果我能让它工作或不工作,我会做出回应。