Я пытаюсь создать простой калькулятор, при нажатии кнопки его значение отображается в текстовом поле, а кнопка «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 вместо внутренних атрибутов события.

enter image description here

У вашего HTML есть проблемы, но причина, по которой ваша функция не работает, из-за его имени «clear», которое уже определено в document.clear ().

Измените имя этой функции на что-то вроде clearField (), и оно будет работать.