簡體   English   中英

Javascript onload無法正常工作(“未捕獲的TypeError:無法將屬性'document.body'設置為null”)

[英]Javascript onload isn't working (“Uncaught TypeError: Cannot set property 'document.body' of null ”)

這是我的代碼:

Javascript:

document.body.onload = function() {
    function UP() {//Ẩn hiện nút UP
        if(window.pageYOffset > window.innerHeight)
            document.getElementById('UP').style.display = "block";
    }
}

HTML標記:

<button id="UP" onclick="toTop(350);"></button>

CSS樣式:

#UP {display: none;}

我的想法是當我向下滾動時,將出現“ UP”按鈕。 但是不知道為什么,它甚至不會返回錯誤:“未捕獲的TypeError:無法將屬性'document.body'設置為null”。 當然,我確實更改了其他腳本,如下所示:

function getReady() {
    UP();
}
function UP() {//Ẩn hiện nút UP
    if(window.pageYOffset > window.innerHeight)
        document.getElementById('UP').style.display = "block";
}

HTML標記:

<body onload="getReady();">
    <button id="UP" onclick="toTop(350);"></button>
</body>

更可怕了。 當我加載網站時,沒有看到body標簽的onload attr,瀏覽器也沒有為我返回任何錯誤。

其他一些信息:我雙方都開發了Cr和FF,這都說明了一個相同的問題。 我正在研究Wordpress來源。

為了澄清@laruiss並解釋發生了什么,讓我們從您的代碼開始:

/* body.onload is not recommended, window.onload is. But thats not the main issue*/
window.onload = function() {
    /* You are declaring a function here. Very important: 
     * its a declaration, NOT a function call 
     */
    function UP() {
        if(window.pageYOffset > window.innerHeight)
            document.getElementById('UP').style.display = "block";
    }
    /* So if you want to execute ('call') your function, you have two options:
     * - Remove the declaration around your function aka `function UP(){` and the ending `}`
     * - Call the function here. To make your code work instantly, lets do that.
     */
    UP();
}

使用onload事件時,實際上是在做正確的事。 沒錯,不建議您在DOM中實際執行此操作,但是應該可以。 DOM加載的最大問題是主觀的。 某些瀏覽器會在內容放入后立即考慮加載正文,其他瀏覽器將等待圖像,而較舊的IE版本將無法全部啟動! 因此,如果您使用推薦的window.onload ,那應該沒問題, 因為一旦DOM准備就緒 ,它將立即啟動 您可能要考慮的另一個大事件是DOMContentLoaded ,但是它沒有得到廣泛的支持。 還有更多內容(也可以通過單擊): https : //developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers.onload

我還想補充一點,即使您將按鈕顯示出來,它也沒有內容,因此它可能顯示為空,或者如果您要重置按鈕樣式,則根本不會顯示。 要記住的事情。

您的代碼存在一些問題:

  • 如注釋中所述, document.body.onload應該替換為window.onload
  • 在onload函數中,您定義了一個函數,但是沒有調用它...

所以

document.body.onload = function() {
    function UP() {//Ẩn hiện nút UP
        if(window.pageYOffset > window.innerHeight)
            document.getElementById('UP').style.display = "block";
    }
}

應替換為:

window.onload = function up() { // Could be anonymous, of course, but should not
    if(window.pageYOffset > window.innerHeight)
        document.getElementById('UP').style.display = "block";
}

要回答您的問題“我的想法是當我向下滾動時,將出現UP按鈕。” 我認為你應該在可滾動容器div上注冊' scroll '事件。 “ body / window.onload”功能只會被觸發一次,因此無法滿足要求。 這是您可以繼續的方法( 工作提琴

<div id="container" onscroll="handleScroll(this)">
    <button id="UP" onclick="toTop(350);">Go to Top</button>
     Scroll me</br>....scrollable content

Java腳本

function handleScroll (obj) {
    var displayVal = "block";
    if (obj.scrollTop == "0") {
        displayVal = "none";
    }
    document.getElementById('UP').style.display = displayVal;
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM