函数不会从 innerHTML 中找到元素

Function wont find element from innerHTML

我在学校做一个项目,我们正在做一个网站,模块化非常重要。因此我将 header 放在 innerHTML 中,因为它将在每个页面上使用。我有一个使用该 innerHTML 中的元素的计数器,但是当我调用该计数器时,它只是说“无法将 innerHTML 的 属性 设置为 null。我已经搜索了几个小时,但似乎没有其他人拥有有这个确切的问题。

在我将 html 放入 innerHTML 之前,计数器工作正常。 我也尝试将脚本放在 innerHTML 所在的 header 下方,以及底部和 body end-tag 下方。结果都一样。

这是 html 和 javascript 的代码。我只使用了用于此的行。

loadTop();
function loadTop() {
   document.getElementById("header").innerHTML = 
   '<div class="topbar">'+
       '<div class="cart">'+
           '<output type="number" id="orderCount">0</output>'
       '</div>'+
   '</div>';

  
}
       
window.onload = loadTop;
       
const cartNow = document.getElementById("orderCount");
let cartNum = 0;
 function cartCounter() {
    cartNum += 1;
    cartNow.innerHTML = cartNum;
    cartNow.style.opacity = 1;
    console.log(cartNow);
 }
<body>
        <header id="header"></header>
        <script src="script.js"></script>
        <button id="oatmeal" onclick="cartCounter()"> + </button>
</body>

请确保在分配 cartNow 之前已调用 loadTop()。否则 cartNow 将为空。

const cartNow = document.getElementById("orderCount")

编辑: 我认为你不应该使用 onload 来加载你的页面,因为 onload 被认为是在页面“加载”之后调用的。相反,我建议您在关闭 body 之前调用您的 loadTop。然后使用 onload 事件来注册您的事件。我不是前端优化专家,所以也许还有更多 elegant/performant 解决方案,但无论如何对你的学校项目来说应该足够了。

document.addEventListener("DOMContentLoaded", () => {
    const cartNow = document.getElementById("orderCount");
    let cartNum = 0;
    document.getElementById('oatmeal').addEventListener('click',  function cartCounter() {
        cartNum += 1;
        cartNow.innerHTML = cartNum;
        cartNow.style.opacity = 1;
        console.log(cartNow);
     });
}); 

<body>
    <header id="header"></header>
    <script src="script.js"></script>
    <button id="oatmeal"> + </button>
    <script>
        (function() {
           document.getElementById("header").innerHTML = 
           '<div class="topbar">'+
               '<div class="cart">'+
                   '<output type="number" id="orderCount">0</output>'
               '</div>'+
           '</div>'
        })();
    </script>
</body>

您必须在 .js 文件的开头调用 JavaScript 函数,如下所示:

loadTop();

function loadTop() {
    document.getElementById("header").innerHTML =
        '<div class="topbar">' +
        '<div id="overskrift"><a href="index.html">ELEMENT</a></div>' +

        '<!--STJERNE-->' +
        '<div class="cart">' +
        '<output type="number" id="orderCount">0</output>'
}

const cartNow = document.getElementById("orderCount");
let cartNum = 0;
function cartCounter() {
    cartNum += 1;
    cartNow.innerHTML = cartNum;
    cartNow.style.opacity = 1;
    console.log(cartNow);
}

现在一切顺利。非常感谢你们俩。我以为出于某种原因我必须使用 window.onload 我在网上找到了一些东西,但我删除了它,只把 loadTop() 放在顶部,一切都已修复!最后,晚安!