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

时间:2015-07-24 14:57:04

标签: javascript 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>

2 个答案:

答案 0 :(得分:12)

内在事件属性(如onclick)非常糟糕。在内部,他们实施with

  

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

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

快速解决此问题的方法是将函数重命名为其他内容或明确调用window.clear()

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

enter image description here

答案 1 :(得分:1)

您的HTML存在问题,但您的功能无法正常工作的原因是因为其名称为“clear”,已由document.clear()定义。

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