古怪的Javascript

时间:2011-05-12 18:59:09

标签: javascript html

我做错了什么但是什么!我已经看了一百遍。出于某种原因,它不是从文档中检索对象。这是我的索引和Javascript源:

var blinkOn =false;
var blinkObj=document.getElementById("blink");
function blinkCursor() {
    if (blinkOn) 
        {   
            blinkObj.style.display="none";
        } else {
            blinkObj.style.display="inline";
        }
    blinkOn=!blinkOn;
    setTimeout("blinkCursor()",500);    
}

blinkCursor();

INDEX:

<html>
    <head>
        <title>
            CMD.exe
        </title>

        <link rel="stylesheet" type="text/css" href="cmd.css" />
        <script language="JavaScript" SRC="cmd.js"></script>
    </head>
    <body>
        <span id="content">&gt;</span><span style="display:none;" id="blink"  >|</span>     
    </body>
</html>

任何帮助都会有很多帮助! (好吧......等等......呃:p)

3 个答案:

答案 0 :(得分:4)

您需要使用onload事件或将脚本内联到主体中,然后放在元素后面。这是因为当加载<head>中的Javascript时,完整的DOM尚不可用,因此无法看到元素。

答案 1 :(得分:3)

不要在全局范围内获取元素,而是在函数中获取引用。如果在元素不存在时调用函数,则可以防止函数失败。

您也可以从body :: onLoad / onDomReady调用此内容,具体取决于框架/首选项。

function blinkCursor() {
    var blinkObj=document.getElementById("blink");
    if (blinkObj) {
        blinkObj.style.display=(blinkObj.style.display == "none") ? 'inline' : 'none';
    }
}
function stopBlink() {
    clearInterval(blinkInterval);
}
var blinkInterval = setInterval(blinkCursor, 500);

另外,不要将setTimeout / setInterval传递给字符串,而是将其传递给函数。

答案 2 :(得分:1)

您的问题是您的JavaScript在解释HTML之前正在执行 - DOM尚未加载。

虽然我建议您使用类似jQuery的东西来确保文档准备就绪,但是如果没有它,问题就解决了:

    <script type="text/javascript">
        function blinkCursor() {
            var blinkObj=document.getElementById("blink");
            blinkObj.style.display = (blinkObj.style.display == "none")? "inline" : "none";
            setTimeout("blinkCursor()",500);
        }
        setTimeout("blinkCursor()",500);    
    </script>