仅一半时间调用Javascript函数

问题描述 投票:0回答:2

我在StackOverflow上看到了一些类似的问题,但是我似乎找不到与我匹配的问题。

我是编程的新手,但是我已经做了很多事情。我目前正在将所有内容合并到一个站点中。为此,我制作了一个包含导航面板的标题。我有6个不同的html页面,并且我不断对标头重复相同的信息,因此我认为使用JS插入标头可能会更好。在那种情况下,我只需要定义一次标题,并在所有html页面上使它相同。 HTML页面的开头如下:

<!DOCTYPE html>
<html lang="en">

<head>
    <title>Main page</title>
    <meta charset="utf-8" />
    <meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0' />
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
    <link rel="stylesheet" href="./index css/index style.css" />
    <script type="text/javascript" src="./index js/index js.js"></script>
</head>

<body>
    <header id="navPanel">
    </header>
<main>
... page content ...
</main>
</body>

某些页面上的脚本更多,但是没有其他针对id="navPanel"的脚本。创建导航面板的JS位于index js.js中。下面的代码是生成导航面板的JS:

window.onload = function setupNav() {
    let navPanel = document.getElementById('navPanel');
    console.log(navPanel);
    document.getElementById('navPanel').innerHTML = '<nav> \
    <ul class="navigation navLinks" id="navBar"> \
        <div class="navTabletFlex"> \
        <img class="logo" src="./images/Logo.png" alt="Logo" /> \
            <li><a href="./index.html">Home</a></li> \
            <li><a href="./construction.html">To Do List</a></li> \
            <li> \
                <div class="dropdownNav" id="dropdownNav"> \
                    <button class="dropbtn" id="dropBtn">Games</button> \
                    <div class="dropdown-content"> \
                        <ul class="navLinksDropdown"> \
                            <li><a href="./rps.html">Rock Paper Scissors</a></li> \
                            <li><a href="./rpsls.html">Rock Paper \
                                    Scissors Lizard Spock</a></li> \
                            <li><a href="./numguess.html">Random Number Guesser</a></li> \
                            <li><a href="./puzzle.html">Puzzle Game</a></li> \
                        </ul> \
                    </div> \
                </div> \
            </li> \
            <li><a href="./construction.html">About me</a></li> \
            <li><a href="./construction.html">Contact</a></li> \
        </div> \
    </ul> \
    <button class="navBarIcon" onclick="toggleNav()"> \
                <i class="fa fa-bars"></i> \
    </button> \
</nav>';
    hightlightCurrentPage();
};

奇怪的是,在index.html,construction.html和numguess.html上,标题正常工作,而在rps.html,rpsls.html和Puzzle.html上,标题则无法正常工作。标头存在,当我尝试在控制台中使用document.getElementById('navPanel')定位标头时,可以在其中使用.innerHTML添加内容。

我尝试将<script type="text/javascript" src="./index js/index js.js"></script>放在</body>标记之前,但无济于事。我在工作页面和非工作页面之间找不到任何区别。所以我希望你们中的一些人有一些我可以寻找的想法。

编辑:以下是其他HTML页面。puzzle.html(不工作

<head>
    <title>Puzzle game</title>
    <meta charset="utf-8" />
    <meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0' />
    <script type="text/javascript" src="./index js/index js.js"></script>
    <script type="module" src="./Puzzle app/js/Cell.js"></script>
    <script type="module" src="./Puzzle app/js/Puzzle app js.js"></script>
    <script type="module" src="./Puzzle app/js/PicturePuzzle.js"></script>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
    <link rel="stylesheet" href="./index css/index style.css" />
</head>

<body>
    <header id="navPanel">
    </header>
... rest of page...

rpsls.html(不工作

<head>
    <title>Rock paper scissors lizard spock App</title>
    <meta charset="utf-8" />
    <meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0' />
    <script type="text/javascript" src="./Rock paper scissors lizard spock app/js/Rock paper scissors lizard spock app js.js"></script>
    <script type="text/javascript" src="./index js/index js.js"></script>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
    <link rel="stylesheet" href="./index css/index style.css" />
</head>

<body onload="getComputerPlays()">
    <header id="navPanel">
    </header>
...rest of page

rps.html(不工作

<head>
    <title>Rock paper scissors App</title>
    <meta charset="utf-8" />
    <meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0' />
    <script type="text/javascript" src="./Rock paper scissors app/js/Rock paper scissors app js.js"></script>
    <script type="text/javascript" src="./index js/index js.js"></script>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
    <link rel="stylesheet" href="./index css/index style.css" />
</head>

<body onload="getComputerPlays()">
    <header id="navPanel">
    </header>
...rest of page

construction.html(正在工作

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
    <link rel="stylesheet" href="./index css/index style.css">
    <script text="text/javascript" src="./index js/index js.js"></script>

    <title>Under Construction</title>
</head>

<body class="construction">
    <header id="navPanel">
    </header>
...rest of page

numguess.html(正在工作

<head>
    <title>Random Number Guessing Game</title>
    <meta charset="utf-8" />
    <meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0' />
    <script src="./Random Number Guesser/js/Random Number Guesser Script.js"></script>
    <script type="text/javascript" src="./index js/index js.js"></script>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
    <link rel="stylesheet" href="./index css/index style.css" />
</head>

<body>
    <header id="navPanel">
    </header>
...rest of page
javascript html function onload
2个回答
0
投票

在您的js文件中,将其内容放置在一个函数调用中,该函数调用侦听正确的时刻以正确采取行动:

window.addEventListener('load', (event) => {
  console.log('page is fully loaded');
  // somewhere here goes your content
});

发生的情况是浏览器开始解析从上到下看到的数据,并尽快开始处理它。但是,通过将您编写的JS放入该函数中,您会告诉浏览器“读取和加载页面完成后,请调用它”。

来源:

https://developer.mozilla.org/en-US/docs/Web/API/Window/load_event


0
投票

页面rpsls.htmlrps.html在加载页面(getComputerPlays())时调用函数<body onload="getComputerPlays()">。这意味着它将替换加载函数,该函数将呈现您在JS文件中定义的标头。

为了定义多个onLoad函数,您可以使用window.addEventListener()定义两个函数:

window.addEventListener('load', setupNav);
window.addEventListener('load', getComputerPlays);

或者您可以为这些页面创建一个onLoad函数,例如:

window.onLoad = function pageLoaded() {   
  setupNav();
  getComputerPlays()
  // ...
}
© www.soinside.com 2019 - 2024. All rights reserved.