简体   繁体   中英

Uncaught TypeError: document.getElementById(…).onclick is not a function

I am running this code to try to let users select the size of a table / matrix. Users can click in a table to select the size of the matrix. However, I'm getting an error for when I try to access onclick of one of the <td> elements.

Specifically, I get the following error on line 179: Uncaught TypeError: document.getElementById(...).onclick is not a function.

I've looked up this error on previous stackoverflow questions, and it seems what people did in the past was redeclare the function (in my case, onclick ) to be a different function / variable. In this document, the only instance of onclick where the error is being thrown.

You can view a live version of this webpage here , and the source is below.

Edit: Ok, I guess linking directly to my page makes it crash for some reason. Try copying and pasting the URL instead: http://la.matthewpagecs.com/LinearAlgebraCalculator/index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Linear Algebra Calculator</title>
    <style type="text/css">
        body {
            background-color: #111111;
            color: #DDDDDD;
        }
        td {
            background-color: #444444;
            padding: 15px;
        }
    </style>
</head>
<body>
    <h1>Linear Algebra Calculator</h1>
    <p>Click on one of the cells in the table below to select your matrix size.</p>
    <div id="table">
    <table>
        <tr>
            <td onmouseenter="newSelection(0, 0)" id="0,0"></td>    
            <td onmouseenter="newSelection(0, 1)" id="0,1"></td>
            <td onmouseenter="newSelection(0, 2)" id="0,2"></td>
            <td onmouseenter="newSelection(0, 3)" id="0,3"></td>
            <td onmouseenter="newSelection(0, 4)" id="0,4"></td>
            <td onmouseenter="newSelection(0, 5)" id="0,5"></td>
            <td onmouseenter="newSelection(0, 6)" id="0,6"></td>
            <td onmouseenter="newSelection(0, 7)" id="0,7"></td>
            <td onmouseenter="newSelection(0, 8)" id="0,8"></td>
            <td onmouseenter="newSelection(0, 9)" id="0,9"></td>
        </tr>

        <tr>
            <td onmouseenter="newSelection(1, 0)" id="1,0"></td>    
            <td onmouseenter="newSelection(1, 1)" id="1,1"></td>
            <td onmouseenter="newSelection(1, 2)" id="1,2"></td>
            <td onmouseenter="newSelection(1, 3)" id="1,3"></td>
            <td onmouseenter="newSelection(1, 4)" id="1,4"></td>
            <td onmouseenter="newSelection(1, 5)" id="1,5"></td>
            <td onmouseenter="newSelection(1, 6)" id="1,6"></td>
            <td onmouseenter="newSelection(1, 7)" id="1,7"></td>
            <td onmouseenter="newSelection(1, 8)" id="1,8"></td>
            <td onmouseenter="newSelection(1, 9)" id="1,9"></td>
        </tr>   

        <tr>
            <td onmouseenter="newSelection(2, 0)" id="2,0"></td>    
            <td onmouseenter="newSelection(2, 1)" id="2,1"></td>
            <td onmouseenter="newSelection(2, 2)" id="2,2"></td>
            <td onmouseenter="newSelection(2, 3)" id="2,3"></td>
            <td onmouseenter="newSelection(2, 4)" id="2,4"></td>
            <td onmouseenter="newSelection(2, 5)" id="2,5"></td>
            <td onmouseenter="newSelection(2, 6)" id="2,6"></td>
            <td onmouseenter="newSelection(2, 7)" id="2,7"></td>
            <td onmouseenter="newSelection(2, 8)" id="2,8"></td>
            <td onmouseenter="newSelection(2, 9)" id="2,9"></td>
        </tr>

        <tr>
            <td onmouseenter="newSelection(3, 0)" id="3,0"></td>    
            <td onmouseenter="newSelection(3, 1)" id="3,1"></td>
            <td onmouseenter="newSelection(3, 2)" id="3,2"></td>
            <td onmouseenter="newSelection(3, 3)" id="3,3"></td>
            <td onmouseenter="newSelection(3, 4)" id="3,4"></td>
            <td onmouseenter="newSelection(3, 5)" id="3,5"></td>
            <td onmouseenter="newSelection(3, 6)" id="3,6"></td>
            <td onmouseenter="newSelection(3, 7)" id="3,7"></td>
            <td onmouseenter="newSelection(3, 8)" id="3,8"></td>
            <td onmouseenter="newSelection(3, 9)" id="3,9"></td>
        </tr>

        <tr>
            <td onmouseenter="newSelection(4, 0)" id="4,0"></td>    
            <td onmouseenter="newSelection(4, 1)" id="4,1"></td>
            <td onmouseenter="newSelection(4, 2)" id="4,2"></td>
            <td onmouseenter="newSelection(4, 3)" id="4,3"></td>
            <td onmouseenter="newSelection(4, 4)" id="4,4"></td>
            <td onmouseenter="newSelection(4, 5)" id="4,5"></td>
            <td onmouseenter="newSelection(4, 6)" id="4,6"></td>
            <td onmouseenter="newSelection(4, 7)" id="4,7"></td>
            <td onmouseenter="newSelection(4, 8)" id="4,8"></td>
            <td onmouseenter="newSelection(4, 9)" id="4,9"></td>
        </tr>

        <tr>
            <td onmouseenter="newSelection(5, 0)" id="5,0"></td>    
            <td onmouseenter="newSelection(5, 1)" id="5,1"></td>
            <td onmouseenter="newSelection(5, 2)" id="5,2"></td>
            <td onmouseenter="newSelection(5, 3)" id="5,3"></td>
            <td onmouseenter="newSelection(5, 4)" id="5,4"></td>
            <td onmouseenter="newSelection(5, 5)" id="5,5"></td>
            <td onmouseenter="newSelection(5, 6)" id="5,6"></td>
            <td onmouseenter="newSelection(5, 7)" id="5,7"></td>
            <td onmouseenter="newSelection(5, 8)" id="5,8"></td>
            <td onmouseenter="newSelection(5, 9)" id="5,9"></td>
        </tr>

        <tr>
            <td onmouseenter="newSelection(6, 0)" id="6,0"></td>    
            <td onmouseenter="newSelection(6, 1)" id="6,1"></td>
            <td onmouseenter="newSelection(6, 2)" id="6,2"></td>
            <td onmouseenter="newSelection(6, 3)" id="6,3"></td>
            <td onmouseenter="newSelection(6, 4)" id="6,4"></td>
            <td onmouseenter="newSelection(6, 5)" id="6,5"></td>
            <td onmouseenter="newSelection(6, 6)" id="6,6"></td>
            <td onmouseenter="newSelection(6, 7)" id="6,7"></td>
            <td onmouseenter="newSelection(6, 8)" id="6,8"></td>
            <td onmouseenter="newSelection(6, 9)" id="6,9"></td>
        </tr>

        <tr>
            <td onmouseenter="newSelection(7, 0)" id="7,0"></td>    
            <td onmouseenter="newSelection(7, 1)" id="7,1"></td>
            <td onmouseenter="newSelection(7, 2)" id="7,2"></td>
            <td onmouseenter="newSelection(7, 3)" id="7,3"></td>
            <td onmouseenter="newSelection(7, 4)" id="7,4"></td>
            <td onmouseenter="newSelection(7, 5)" id="7,5"></td>
            <td onmouseenter="newSelection(7, 6)" id="7,6"></td>
            <td onmouseenter="newSelection(7, 7)" id="7,7"></td>
            <td onmouseenter="newSelection(7, 8)" id="7,8"></td>
            <td onmouseenter="newSelection(7, 9)" id="7,9"></td>
        </tr>

        <tr>
            <td onmouseenter="newSelection(8, 0)" id="8,0"></td>    
            <td onmouseenter="newSelection(8, 1)" id="8,1"></td>
            <td onmouseenter="newSelection(8, 2)" id="8,2"></td>
            <td onmouseenter="newSelection(8, 3)" id="8,3"></td>
            <td onmouseenter="newSelection(8, 4)" id="8,4"></td>
            <td onmouseenter="newSelection(8, 5)" id="8,5"></td>
            <td onmouseenter="newSelection(8, 6)" id="8,6"></td>
            <td onmouseenter="newSelection(8, 7)" id="8,7"></td>
            <td onmouseenter="newSelection(8, 8)" id="8,8"></td>
            <td onmouseenter="newSelection(8, 9)" id="8,9"></td>
        </tr>

        <tr>
            <td onmouseenter="newSelection(9, 0)" id="9,0"></td>    
            <td onmouseenter="newSelection(9, 1)" id="9,1"></td>
            <td onmouseenter="newSelection(9, 2)" id="9,2"></td>
            <td onmouseenter="newSelection(9, 3)" id="9,3"></td>
            <td onmouseenter="newSelection(9, 4)" id="9,4"></td>
            <td onmouseenter="newSelection(9, 5)" id="9,5"></td>
            <td onmouseenter="newSelection(9, 6)" id="9,6"></td>
            <td onmouseenter="newSelection(9, 7)" id="9,7"></td>
            <td onmouseenter="newSelection(9, 8)" id="9,8"></td>
            <td onmouseenter="newSelection(9, 9)" id="9,9"></td>
        </tr>
    </table>
    </div>
    <h1 id="selection"></h1>
    <script>
        function newSelection(row, column) {
            clearSelection();
            for (i = 0; i <= row; i++)
                for (j = 0; j <= column; j++)
                    document.getElementById(i + "," + j).style.backgroundColor = "#CCCCCC";
            row++;
            column++;
            document.getElementById("selection").innerHTML = row + " x " + column + " matrix";
        }

        function clearSelection() {
            for (i = 0; i < 10; i++)
                for (j = 0; j < 10; j++)
                    document.getElementById(i + "," + j).style.backgroundColor = "#444444";
        }

        function ceck() {
            document.getElementById("table").innerHTML = "You selected an element.";
        }

        // add onclick listeners
        window.onload = function() {
        for (i = 0; i < 10; i++)
            for (j = 0; j < 10; j++)
                document.getElementById(i + "," + j).onclick(ceck)
        }

    </script>
</body>
</html>

onclick is indeed not a function but property. You should assign a function to it to handle event. So it should be:

document.getElementById(i + "," + j).onclick = ceck;

MDN - onclick is a property.

The onclick property returns the click event handler code on the current element.

document.getElementById(i + "," + j).onclick = ceck;

Or you can use an anonymous function, like this:

document.getElementById(i + "," + j).onclick = function() { alert("Hello"); };

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM