【问题标题】:My Javascript Code isn't detecting input我的 Javascript 代码未检测到输入
【发布时间】:2015-09-22 23:26:46
【问题描述】:

我一直在尝试让输入来处理我的 javascript 代码,但无论如何它都不会检测到输入!我到处检查了,还是不行!

<!Doctype HTML>
<html>

<head>
	<title>Input Test</title>
</head>

<body>

	<!--<button onClick="main()">Start Game</button>-->

	<p id = "test"> </p>
	
</body>

<script>

	main();
	function main() {	
		create();
	}
	
	function create() {
		
		var keystate;
		keystate = {};
		// keep track of keyboard presses
		document.addEventListener("keydown", function(evt) {
			keystate[evt.keyCode] = true;
		});
		document.addEventListener("keyup", function(evt) {
			delete keystate[evt.keyCode];
		});
		
		var Up_Key = 38;
		
		setInterval("update()", 100);
		
	}
	
	function update() {
		
		//document.getElementById("test").innerHTML = "twerks";
		
		if (keystate[Up_Key]) {
			document.getElementById("test").innerHTML = "works";
		}
		
	}

</script>

</html>

我一直在使用一些教程,我只是想要输入检测。

【问题讨论】:

  • 您可以从有效的 HTML 开始,脚本元素仅在头部或正文中有效(尽管浏览器可能会将元素移动到正文中)。
  • 您在create 中定义keystateUp_Key,并在它们不再在范围内的update 中使用它们。将 keystateUp_Key 设为全局。您友好的浏览器错误控制台应该会告诉您这一点。
  • 友好的浏览器错误控制台在哪里
  • Windows 操作系统:CTRL & SHIFT + J 将打开您的浏览器控制台。它将显示错误日志。
  • @NewToJS——不适合我,F12 有效。

标签: javascript html input


【解决方案1】:

变量keystateUp_Keycreate 函数中定义,但您试图在另一个名为update 的函数中使用它们。他们会在那里undefined,因为它在另一个范围内。

如果你在函数之外声明这些变量,你的代码就可以正常工作。

最好将所有代码封装在 IIFE(立即调用的函数表达式)中,这样就不会使用全局变量污染全局范围。正如谷歌所说:

立即调用的函数表达式(或 IIFE,发音为“iffy”)是一种 JavaScript 设计模式,它使用 JavaScript 的函数作用域生成词法作用域。

这是您的代码已更新并正在运行:

<!DOCTYPE HTML>
<html>

<head>
  <title>Input Test</title>
</head>

<body>
  <p id="test"></p>
</body>

<script>
  (function() {
    var keystate = {};
    var Up_Key = 38;

    main();

    function main() {
      create();
    }

    function create() {
      // keep track of keyboard presses
      document.addEventListener("keydown", function(evt) {
        keystate[evt.keyCode] = true;
      });
      document.addEventListener("keyup", function(evt) {
        delete keystate[evt.keyCode];
      });

      setInterval(update, 100);
    }

    function update() {
      if (keystate[Up_Key]) {
        document.getElementById("test").innerHTML = "works";
      }
    }
  })();
</script>

</html>

【讨论】:

  • yayyyyyy,它有效,谢谢,在此之前我对 javascript 没有很好的理解,因为我首先学习了 Java 编程,所以这对我来说有点奇怪,我现在意识到这些语言非常相似, 谢谢
  • @Flame6332 如果我的回答对您有用,请点击箭头进行投票,并点击V 将其标记为已接受!谢谢:)
  • 好的,我已经投票并检查它是否完整,再次感谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-25
  • 1970-01-01
相关资源
最近更新 更多