Javascript 为什么可以';我是否从onclick属性调用名为clear的函数?

Javascript 为什么可以';我是否从onclick属性调用名为clear的函数?,javascript,html,Javascript,Html,我正在尝试创建一个简单的计算器,当单击一个按钮时,其值显示在文本字段中,按钮“C”应该清除文本字段,但其onclick=“clear()”不起作用 <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html;

我正在尝试创建一个简单的计算器,当单击一个按钮时,其值显示在文本字段中,按钮“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>

计算器
#钮扣{
填充:10px;
}
函数填充(val){
document.getElementById(“字段”).value+=val;
}
函数clear(){
document.getElementById(“字段”).value=“”;
}

内在事件属性(如
onclick
)非常可怕。它们在内部执行:

不建议使用with语句,因为它可能会导致混淆错误和兼容性问题

因此,您实际上是在调用而不是全局
clear()

快速修复方法是将函数重命名为其他函数,或显式调用
window.clear()

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


您的HTML有问题,但函数无法工作的原因是它的名称“clear”,该名称已由
document.clear()
定义


将该函数的名称更改为类似于
clearField()
的名称,它就会工作。

您遇到了客户端问题。不要向我们显示服务器端代码。获取HTML输出。您没有关闭按钮标记。不可靠的语法突出显示应该是错误的。您的HTML无效。好好使用,据我所知,您的最后两个输入是一场灾难:第一个输入没有关闭,而第二个输入没有关闭,并且有一个caotic值:
value=“=”
,您应该首先修复这些输入。使用不同的ID。这就是为什么它叫id。把你的脚本放在身体的末端,而不是头部。有时您会触发一些尚未加载(正文)的内容。内在处理程序的作用域链上有许多对象,包括当前元素和文档,可能还有祖先元素(例如,表单控制处理程序的作用域链上有表单)。with是否用于此目的还没有定论。在这些元素上解析哪个标识符(例如,ID始终在当前目标上,操作将在父窗体上,类名可能在任何位置)或全局/窗口对象上并不总是很清楚。更好地命名全局标识符(例如,冲突可能性更小,更具描述性)也有帮助。哇。。。真是一件事。以前不知道这一点。因此,您实际上调用的是document.clear()而不是全局clear()为什么有
文档
?你知道这
功能如何与
onclick
类似属性一起工作吗?@Maximus-因为,如屏幕截图所示,有一个with块使用文档对象。@Quentin,我可以看到:)。我想知道为什么它使用
文档
作为对象的