为什么我不能从onclick属性调用一个名为clear的函数?

我试图创建一个简单的计算器,当一个按钮被点击时,它的值显示在文本字段中,按钮“C”应该清除文本字段,但其onclick =“clear()”不工作?

<%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Calculator</title> <style> #button{ padding: 10px; } </style> <script> function fill(val){ document.getElementById("field").value+=val; } function clear(){ document.getElementById("field").value=""; } </script> </head> <body> <form> <table> <tr><input type="text" name="field" id="field" size="8"/></tr> <%! int k = 1; %> <% for(int i=0;i<3;i++){ %> <tr> <% for(int j=0;j<3;j++){ %> <td><input type="button" id="button" onclick="fill(this.value)" value="<%=k++%>" /></td> <% } %> </tr> <% } %> <tr> <!--here onclick="clear()" is not working?? --> <td><input type="button" id="button" value="C" onclick="clear()"/></td> <td><input type="button" id="button" value="0" onclick="fill(this.value)"</td> <td><input type="submit" id="button" value="="</td> </tr> </table> </form> </body> </html> 

内部事件属性(如onclick )是可怕的。 他们with内部执行:

不建议使用with语句,因为它可能是令人困惑的错误和兼容性问题的根源。

因此,你实际上是调用document.clear()而不是你的全局clear()

对此的快速解决方法是将函数重命名为其他名称或显式调用window.clear()

更好的解决方案是将事件处理程序与addEventListener而不是内部事件属性绑定。

在这里输入图像描述

你的HTML有问题,但你的函数不工作的原因是因为它的名字“clear”,这已经由document.clear()定义了。

将该函数的名称更改为像clearField()这样的函数,它将起作用。