Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/88.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_Html_Area - Fatal编程技术网

正方形javascript程序的面积

正方形javascript程序的面积,javascript,html,area,Javascript,Html,Area,以下是代码: <h2>Area of a Square (A = s<sup>2</sup>)</h2> <form> <label class = "left">Side Length: </label> <input id = "areaSquare" type = "text" class = "right" /> <br /> <label clas

以下是代码:

<h2>Area of a Square (A = s<sup>2</sup>)</h2>
    <form>
    <label class = "left">Side Length: </label>  <input id = "areaSquare" type = "text" class = "right" /> <br />
    <label class = "left">Answer: </label>  <input id = "answerAreaSquare" type = "text" class = "right" /> <br />
    <input type = "submit" value = "Submit" onclick = "areaSquare(); return false" />
    </form>

function areaSquare(side)
{
side = document.getElementById("areaSquare").value;
var answer = side*side;
document.getElementById("answerAreaSquare").value = answer;
}
正方形的面积(a=s2)
边长:
回答:
功能区广场(侧面) { side=document.getElementById(“areaSquare”).value; var answer=侧面*侧面; document.getElementById(“answerAreaSquare”)。值=答案; }

我认为这是一个非常简单的程序,但我不知道为什么它不起作用。请提供帮助。

您正试图从onclick属性调用全局函数。浏览器对内部事件属性(比如onclick)的作用域做了非常奇怪的事情,当在表单控件中使用时,会有本地变量通过其ID引用所有表单控件

因为您有一个id与全局函数匹配的元素,所以它在局部范围中获取一个变量并屏蔽函数

您可以使用以下方法对此进行测试:

 onclick="alert(areaSquare); areaSquare(); return false" 
快速而肮脏的黑客是重命名其中一个


更好的解决方案是首先避免使用全局变量

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Demo</title>
</head>
<body>
<h1>Area of a Square (A = s<sup>2</sup>)</h1>
    <form>
      <label for="areaSquare">Side Length: </label>
      <input id="areaSquare"> <br>

      <label for="answerAreaSquare">Answer: </label>
      <output id="answerAreaSquare"></output> <br>

      <input type="submit" value="Submit">
    </form>
<script>
// IIFE for scope
(function () {

  // Locally scoped function
  function areaSquare(event) {
    var side = document.getElementById("areaSquare").value;
    var answer = side*side;
    document.getElementById("answerAreaSquare").value = answer;
    event.preventDefault();
  }

  // Event handler bound with JS instead of HTML
  document.querySelector('form').addEventListener('submit', areaSquare);
})();
  </script>

</body>
</html>

演示
正方形的面积(a=s2)
边长:

答复:
//范围的生命 (功能(){ //局部作用域函数 功能区广场(活动){ var side=document.getElementById(“areaSquare”).value; var answer=侧面*侧面; document.getElementById(“answerAreaSquare”)。值=答案; event.preventDefault(); } //用JS而不是HTML绑定的事件处理程序 document.querySelector('form')。addEventListener('submit',areaSquare); })();
Nice,不知道它会创建一个覆盖它的全局对象(当它说对象不是函数时,这是很明显的,但我似乎无法直接从window.areaSquare访问它,所以它放在哪里?)p.s.不知道为什么这个问题中所有的反对票都被否决了:我忘记了内在事件属性的作用域规则(主要是因为它们既愚蠢又令人困惑)。更正了答案中的解释。现在有了意义,调用window.areaSquare()将是最简单的解决方案。