window.onload 中调用的函数无法识别元素

发布于 2024-12-09 13:51:48 字数 612 浏览 0 评论 0原文

我在这里有点困惑。我认为window.onload中指定的函数在页面加载之前没有执行。尽管如此,我在下面的代码中收到一个错误(这里是 jsfiddle 版本):

<script>
    function updateImage(url){     
        document.getElementById("foo").src = url;
    }    
    window.onload = updateImage("http://dummyimage.com/100x100/000/fff.png&text=qux");
</script>

<img id="foo" alt="" src="http://dummyimage.com/100x100/000/fff.png&text=bar" />

它给了我

Error: document.getElementById("foo") is null

:将图像移动到脚本上方一切都很好。

I am a bit confused here. I thought that the function specified in window.onload did not execute before the page was loaded. Nervertheless, I get an error in the below code (heres the jsfiddle version):

<script>
    function updateImage(url){     
        document.getElementById("foo").src = url;
    }    
    window.onload = updateImage("http://dummyimage.com/100x100/000/fff.png&text=qux");
</script>

<img id="foo" alt="" src="http://dummyimage.com/100x100/000/fff.png&text=bar" />

It gives me:

Error: document.getElementById("foo") is null

When moving the image above the script all works well.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

星星的轨迹 2024-12-16 13:51:48

window.onload 期望是一个函数 - 加载页面时它将调用该函数。但你分配给它的并不是一个函数。您指定

updateImage("http://dummyimage.com/100x100/000/fff.png&text=qux");

立即执行 updateImage 函数,并且由于 updateImage 正文中没有 return 语句,因此返回值为未定义。因此,最后,window.onload 的值为undefined

解决方案是将这部分代码更改为:

window.onload = function(){
    updateImage("http://dummyimage.com/100x100/000/fff.png&text=qux");
}

这将导致它在加载窗口时调用该函数并执行您期望的操作。

window.onload expects to be a function - which it will call when the page is loaded. But what you've assigned to it is not a function. You assigned

updateImage("http://dummyimage.com/100x100/000/fff.png&text=qux");

which immediately executes the updateImage function, and since you don't have a return statement in the body of updateImage, the return value is undefined. Therefore, at the end, window.onload has the value undefined.

A solution would be to change that bit of code to:

window.onload = function(){
    updateImage("http://dummyimage.com/100x100/000/fff.png&text=qux");
}

This will cause it to call the function when the window has been loaded and do what you'd expect.

她如夕阳 2024-12-16 13:51:48

您可以使用触发器来检查元素是否已加载。

<script>

    function updateImage(url){     
        document.getElementById("foo").src = url;
    }

    function initOnLoad(sElementName) {
        var oElement = (sElementName == "body") ? document[sElementName] : document.getElementById(sElementName); 
        if(oElement != null && typeof(oElement) != "undefined") { 
            updateImage("http://dummyimage.com/100x100/000/fff.png&text=qux");
        } 
        else { 
            setTimeout(function() { 
                initOnLoad(sElementName); 
            }, 0); 
        } 
    }

    initOnLoad('body');
</script>

<img id="foo" alt="" src="http://dummyimage.com/100x100/000/fff.png&text=bar" />

You can use trigger that will check is element loaded.

<script>

    function updateImage(url){     
        document.getElementById("foo").src = url;
    }

    function initOnLoad(sElementName) {
        var oElement = (sElementName == "body") ? document[sElementName] : document.getElementById(sElementName); 
        if(oElement != null && typeof(oElement) != "undefined") { 
            updateImage("http://dummyimage.com/100x100/000/fff.png&text=qux");
        } 
        else { 
            setTimeout(function() { 
                initOnLoad(sElementName); 
            }, 0); 
        } 
    }

    initOnLoad('body');
</script>

<img id="foo" alt="" src="http://dummyimage.com/100x100/000/fff.png&text=bar" />
妞丶爷亲个 2024-12-16 13:51:48

您的代码中有错误。

window.onload = updateImage("...");

您没有为窗口加载分配函数处理程序。您正在分配 updateImage 函数的 RESULT。它在图像加载甚至添加到 DOM 之前立即执行。要分配函数处理程序,您需要:

window.onload = updateImage;

window.onload = function(){
  updateImage("http://dummyimage.com/100x100/000/fff.png&text=qux");
}

或 使用 jQuery

$(document).ready(function(){
  updateImage("http://dummyimage.com/100x100/000/fff.png&text=qux"); 
});

You have an error in your code.

window.onload = updateImage("...");

You are not assigning a function handler to the window onload. You are assigning the RESULT of the updateImage function. Which is executed immediately before image is loaded or even added to the DOM. To assign function handler you need:

window.onload = updateImage;

or

window.onload = function(){
  updateImage("http://dummyimage.com/100x100/000/fff.png&text=qux");
}

or by using jQuery

$(document).ready(function(){
  updateImage("http://dummyimage.com/100x100/000/fff.png&text=qux"); 
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文