"Undefined" 警告框触发后出现在文档的一侧

"Undefined" appears on side of document after alert box triggers

我一直在制作一个网站,如果您单击一个按钮,就会弹出一个警告框。但是在我单击按钮后,"undefined" 一词出现在我的文档的一侧。

我一直以来的做法是这样的:


<button onclick="run()">Click me</button>
<span id="no"></span>
<script>
function no() {
document.getElementById("no").innerHTML = alert("This is an alert box");
}
</script>

不知为何,点击按钮后,文档上出现了"undefined"字样。如您所见,如果您 运行 代码段,一旦您单击其中一个 "buy" 按钮,如果您向下滚动到产品页面的底部,您将看到单词 "undefined"左边。我不应该使用这种方法吗?

function purchase() {
  document.getElementById("no").innerHTML = alert("Sorry, but we're all sold out! Try again later.");
}
<!DOCTYPE html>
<html>

<head profile="http://www.w3.org/2005/10/profile">
  <title>Buy stuff at a high price!</title>
  <link rel="icon" type="image/png" href="https://cdn.hipwallpaper.com/i/63/61/AykYVG.png">
</head>

<body>

  <style>
    center.mission {
      font-family: serrif;
      font-size: 180%;
      background-color: rgb(100, 200, 0);
      LINE-HEIGHT: 1;
    }
    
    body {
      background-color: rgb(196, 255, 196);
    }
  </style>


  <!--Our products-->
  <p>
    </br>
    <center class="products">
      <h1>OUR PRODUCTS</h1>
    </center>
    <center>
      <h3>NO RETURNS</h3>
    </center>
    <br/>
    <div id="column1">Single sheet 8.5"/11" printer paper
      <br/>
      <img src="https://www.backgroundsy.com/file/large/blank-paper-background.jpg" height="150px" width="350px" />
      <button onclick="purchase()">BUY NOW FOR .99</button>
    </div>
    <div id="column2">Single sheet 8.5"/11" printer paper(pre-crumpled)
      <br/>
      <center><img src="https://149351503.v2.pressablecdn.com/wp-content/uploads/2015/09/paper_71_closed.png" height="150px" width="200px" /></center>
      <button onclick="purchase()">BUY NOW FOR .99</button>
    </div>
    <div id="column3">Single CD-R disc, scratched
      <br/>
      <img src="https://i.redd.it/akbvkcw2xgmz.jpg" height="150px" width="250px" />
      <br/>
      <button onclick="purchase()">BUY NOW FOR .99</button>
    </div>
    <style>
      center.products {
        color: green;
        background-color: purple;
      }
      
      div {
        float: left;
        height: 200px;
        width: 200px;
        padding: 0 10px;
      }
      
      #column1 {
        background-color: lightgrey;
        width: 30%;
      }
      
      #column2 {
        background-color: grey;
        width: 30%;
      }
      
      #column3 {
        background-color: darkgrey;
        width: 30%;
      }
    </style>
    <div id="column4">Single toilet paper square for quarentine days
      <br/>
      <img src="https://photos1.blogger.com/blogger/7265/3234/1600/napkin.jpg" height="150px" width="250px" />
      <button onclick="purchase()">BUY NOW FOR .99</button>
    </div>
    <div id="column5">Single use toothpick
      <br/>
      <center><img src="https://sc02.alicdn.com/kf/HTB1sYpPQpXXXXcPXXXXq6xXFXXXu.jpg" height="150px" width="300px" /></center>
      <button onclick="purchase()">BUY NOW FOR .99</button>
    </div>
    <div id="column6">10cm dental floss
      <br/>
      <img src="https://upload.wikimedia.org/wikipedia/commons/5/53/Dental_floss_%28whole%29.jpg" height="150px" width="250px" />
      <br/>
      <button onclick="purchase()">BUY NOW FOR 9.99</button>
    </div>
    <style>
      center.products {
        color: green;
        background-color: purple;
      }
      
      div {
        float: left;
        height: 200px;
        width: 200px;
        padding: 0 10px;
      }
      
      #column4 {
        background-color: darkgrey;
        width: 30%;
      }
      
      #column5 {
        background-color: lightgrey;
        width: 30%;
      }
      
      #column6 {
        background-color: grey;
        width: 30%;
      }
    </style>

    <!--For click events-->
    <span id="no"></span>

</body>

</html>

有没有办法在不改变我的方法的情况下阻止这种情况发生?我很抱歉它太乱了,它并不意味着 运行 在 stack overflow snippet creator 上。

注意:本网站并非专业网站。事实上,它意味着设计不佳。这就是我使用 <center> 属性的原因。

alert方法在javascriptreturns中没有值,在javascript中是undefined

您正在将 span 内部 html 设置为该值

document.getElementById("no").innerHTML = alert("Sorry, but we're all sold out! Try again later.");

我很好奇你认为上面的行做了什么。

为什么要将元素的 innerHTML 设置为提醒?

function purchase() {
  alert("Sorry, but we're all sold out! Try again later.");
}
<!--Copyright 2020 AWOL Industries International. All rights reserved-->

<!DOCTYPE html>
<html>

<head profile="http://www.w3.org/2005/10/profile">
  <title>Buy stuff at a high price!</title>
  <link rel="icon" type="image/png" href="https://cdn.hipwallpaper.com/i/63/61/AykYVG.png">
</head>

<body>
  <center>
    <h1 style="color:red; background-color:black">AWOL INDUSTRIES INTERNATIONAL</h1>
  </center>


  <style>
    center.mission {
      font-family: serrif;
      font-size: 180%;
      background-color: rgb(100, 200, 0);
      LINE-HEIGHT: 1;
    }
    
    body {
      background-color: rgb(196, 255, 196);
    }
  </style>


  <!--Our products-->
  <p>
    </br>
    <center class="products">
      <h1>OUR PRODUCTS</h1>
    </center>
    <center>
      <h3>NO RETURNS</h3>
    </center>
    <br/>
    <div id="column1">Single sheet 8.5"/11" printer paper
      <br/>
      <img src="https://www.backgroundsy.com/file/large/blank-paper-background.jpg" height="150px" width="350px" />
      <button onclick="purchase()">BUY NOW FOR .99</button>
    </div>
    <div id="column2">Single sheet 8.5"/11" printer paper(pre-crumpled)
      <br/>
      <center><img src="https://149351503.v2.pressablecdn.com/wp-content/uploads/2015/09/paper_71_closed.png" height="150px" width="200px" /></center>
      <button onclick="purchase()">BUY NOW FOR .99</button>
    </div>
    <div id="column3">Single CD-R disc, scratched
      <br/>
      <img src="https://i.redd.it/akbvkcw2xgmz.jpg" height="150px" width="250px" />
      <br/>
      <button onclick="purchase()">BUY NOW FOR .99</button>
    </div>
    <style>
      center.products {
        color: green;
        background-color: purple;
      }
      
      div {
        float: left;
        height: 200px;
        width: 200px;
        padding: 0 10px;
      }
      
      #column1 {
        background-color: lightgrey;
        width: 30%;
      }
      
      #column2 {
        background-color: grey;
        width: 30%;
      }
      
      #column3 {
        background-color: darkgrey;
        width: 30%;
      }
    </style>
    <div id="column4">Single toilet paper square for quarentine days
      <br/>
      <img src="https://photos1.blogger.com/blogger/7265/3234/1600/napkin.jpg" height="150px" width="250px" />
      <button onclick="purchase()">BUY NOW FOR .99</button>
    </div>
    <div id="column5">Single use toothpick
      <br/>
      <center><img src="https://sc02.alicdn.com/kf/HTB1sYpPQpXXXXcPXXXXq6xXFXXXu.jpg" height="150px" width="300px" /></center>
      <button onclick="purchase()">BUY NOW FOR .99</button>
    </div>
    <div id="column6">10cm dental floss
      <br/>
      <img src="https://upload.wikimedia.org/wikipedia/commons/5/53/Dental_floss_%28whole%29.jpg" height="150px" width="250px" />
      <br/>
      <button onclick="purchase()">BUY NOW FOR 9.99</button>
    </div>
    <style>
      center.products {
        color: green;
        background-color: purple;
      }
      
      div {
        float: left;
        height: 200px;
        width: 200px;
        padding: 0 10px;
      }
      
      #column4 {
        background-color: darkgrey;
        width: 30%;
      }
      
      #column5 {
        background-color: lightgrey;
        width: 30%;
      }
      
      #column6 {
        background-color: grey;
        width: 30%;
      }
    </style>

    <!--For click events-->
    <span id="no"></span>

</body>

</html>

这将解决您的问题。

在javascript中,任何未定义的变量(或属性)都是undefined(这是一个类型,如StringObjectDatenull、等等)。当此结果被强制转换为字符串时,它显示为实际字符串 "undefined"。在浏览器的控制台中尝试这些以感受一下:

console.log(foo);
console.log(window.foo);
console.log(String(window.foo));

当您将 div 的 innerHTML 属性 分配给 alert function 的结果时(没有 return 任何东西,因此undefined 的值),您将其强制转换为字符串 "undefined" 并将其设置为 div 的 innerHTML。您的实际预期行为是什么?