TypeError:无法读取属性' innerHTML' null

时间:2016-11-16 15:19:48

标签: javascript

我正在尝试保留id" bestTime"下的最佳时间值,但我继续在Chrome中收到以下错误:无法读取属性&inner;内部HTML'在showBestTime上为null。

不确定我做错了什么,我附上了以下代码。我正在尝试处理函数showBestTime中的最佳时间。提前谢谢!



<html>
    <head>
        <title>Reaction tester</title>
        </head>
        <style type="text/css">
            #page-container{
                width: 1000px;
                margin: 0 auto;
                height: 800px;
            }
            body{
                margin: 0;
                padding: 0;
                font-family: Helvetica, Arial, freesans, sans-serif;
            }
            #shape{
                width: 200px;
                height: 200px;
                background-color: red;
                display: none;
                position: relative;
            }
            .time{
                font-weight: bold;
            }
        </style>
    <body>
        <div id="page-container">
            <h1>Test Your Reactions!</h1>
            <p>Click on the boxes and circles as quickly as you can!</p>
            <p class="time">Your time: <span id="timeTaken"></span></p>
            <p class="time">Best time: <span id="bestTime">10</span>s</p>
            <div id="shape"></div>
        </div>
        <script type="text/javascript">
            var start=new Date().getTime();
            function getRandomColor() {
                var letters= "0123456789ABCDEF";
                var color= "#";
                for (var i=0; i<6; i++) {
                    color +=letters[Math.floor(Math.random()*16)];
                }
                return color;
            }
            function makeShapeAppear(){
                var top=Math.random()*400;
                var left=Math.random()*800;
                var width=(Math.random()*400)+100;
                if(Math.random()>0.5){ document.getElementById("shape").style.borderRadius="50%";
                } else{
                document.getElementById("shape").style.borderRadius="0";
                } document.getElementById("shape").style.backgroundColor=getRandomColor();
                document.getElementById("shape").style.top=top+"px";
                document.getElementById("shape").style.left=left+"px"; document.getElementById("shape").style.width=width+"px"; document.getElementById("shape").style.height=width+"px";
                document.getElementById("shape").style.display="block";
                start=new Date().getTime();
            }
            function appearAfterDelay(){
                setTimeout(makeShapeAppear, (Math.random() * 2000));
            }
            function showBestTime(y){ if(y<document.getElementById("besttime").innerHTML){
                    document.getElementById("besttime").innerHTML=y;
                }
            }
            appearAfterDelay();
            document.getElementById("shape").onclick=function(){
               document.getElementById("shape").style.display="none";
               var end=new Date().getTime();
               var timeTaken=(end-start)/1000; document.getElementById("timeTaken").innerHTML=timeTaken+"s";
               appearAfterDelay();
               showBestTime(timeTaken);
           }
        </script>
    </body>
</html>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:1)

您在选择器中犯了拼写错误。您已将besttime作为选择器而不是bestTime。我已经添加了工作代码。

&#13;
&#13;
<html>

<head>
    <title>Reaction tester</title>
</head>
<style type="text/css">
    #page-container {
        width: 1000px;
        margin: 0 auto;
        height: 800px;
    }
    
    body {
        margin: 0;
        padding: 0;
        font-family: Helvetica, Arial, freesans, sans-serif;
    }
    
    #shape {
        width: 200px;
        height: 200px;
        background-color: red;
        display: none;
        position: relative;
    }
    
    .time {
        font-weight: bold;
    }
</style>

<body>
    <div id="page-container">
        <h1>Test Your Reactions!</h1>
        <p>Click on the boxes and circles as quickly as you can!</p>
        <p class="time">Your time: <span id="timeTaken"></span></p>
        <p class="time">Best time: <span id="bestTime">10</span>s</p>
        <div id="shape"></div>
    </div>
    <script type="text/javascript">
        var start = new Date().getTime();

        function getRandomColor() {
            var letters = "0123456789ABCDEF";
            var color = "#";
            for (var i = 0; i < 6; i++) {
                color += letters[Math.floor(Math.random() * 16)];
            }
            return color;
        }

        function makeShapeAppear() {
            var top = Math.random() * 400;
            var left = Math.random() * 800;
            var width = (Math.random() * 400) + 100;
            if (Math.random() > 0.5) {
                document.getElementById("shape").style.borderRadius = "50%";
            } else {
                document.getElementById("shape").style.borderRadius = "0";
            }
            document.getElementById("shape").style.backgroundColor = getRandomColor();
            document.getElementById("shape").style.top = top + "px";
            document.getElementById("shape").style.left = left + "px";
            document.getElementById("shape").style.width = width + "px";
            document.getElementById("shape").style.height = width + "px";
            document.getElementById("shape").style.display = "block";
            start = new Date().getTime();
        }

        function appearAfterDelay() {
            setTimeout(makeShapeAppear, (Math.random() * 2000));
        }

        function showBestTime(y) {
            if (y < document.getElementById("bestTime").innerHTML) {
                document.getElementById("bestTime").innerHTML = y;
            }
        }
        appearAfterDelay();
        document.getElementById("shape").onclick = function () {
            document.getElementById("shape").style.display = "none";
            var end = new Date().getTime();
            var timeTaken = (end - start) / 1000;
            document.getElementById("timeTaken").innerHTML = timeTaken + "s";
            appearAfterDelay();
            showBestTime(timeTaken);
        }
    </script>
</body>

</html>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

你有跨度:

<span id="bestTime">

并使用

进行查询
document.getElementById("besttime")

bestTime不等于besttime,因此请更改为:

document.getElementById("bestTime")