javascript - 尝试学习 addEventListener 但我的代码不起作用

标签 javascript html addeventlistener

我正在尝试创建一个神奇的 8 球。我在数组的顶部添加了答案,添加了选择随机答案的代码,当单击按钮时,它应该将所述随机答案放在 div 中的 p 标记中。它实际上在 codePen 中运行得很好几次然后就停止了。我什么都没改变。谁能告诉我我缺少什么?

HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" href="style.css">
    <script src="script.js"></script>
    <title>8 Ball</title>
</head>
<body>
    <div class="ball">
        <div id="display">

          <p id="output"></p>
        </div>

    </div>
      <button id="button">Answer</button>
</body>
</html>

JavaScript

var answers = ["Yes!", "Absolutely!", "Not A Chance", "No", 
"Ask Me Later", "Not Yet"];

//random answer function displays random in the output id
var randomAnswer = answers[Math.floor(Math.random()*answers.length)];

function myFunction(){
    document.getElementById('output').innerHTML = randomAnswer;
 }

 document.getElementById('button').addEventListener('click', myFunction);

我试过四处移动并查找 addEventListener。这里也有一些问题,但我还没有找到任何可以解决我的问题的方法。

最佳答案

尝试重新排列您的 <script> 的位置HTML 中的标记,以便在加载/解析 DOM 后运行脚本。 当您的脚本运行时,button您尝试添加点击监听器的那个不会出现,因为脚本是从 <head> 运行的<body> 之前的标签DOM 内容已加载并准备就绪。

尝试以下调整:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" href="style.css">
    <title>8 Ball</title>
</head>
<body>
    <div class="ball">
        <div id="display">

          <p id="output"></p>
        </div>

    </div>
      <button id="button">Answer</button>

    <!-- Put script here instead -->
    <script src="script.js"></script>
</body>
</html>

此外,请考虑修改您的 javascript,以便在每次用户单击按钮时重新计算 randomAnswer,以便每次单击按钮时显示的答案都可以更改:

var answers = ["Yes!", "Absolutely!", "Not A Chance", "No", 
"Ask Me Later", "Not Yet"];

function myFunction(){

    //[UPDATE] Move the random answer computation inside of myFunction()
    var randomAnswer = answers[Math.floor(Math.random()*answers.length)];

    document.getElementById('output').innerHTML = randomAnswer;
 }

 document.getElementById('button').addEventListener('click', myFunction);

关于javascript - 尝试学习 addEventListener 但我的代码不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52375240/

相关文章:

javascript - 水平翻转图标并在垂直轴上旋转它

JavaScript parseInt 转换有问题

javascript - 验证和运行 javascript (html5 canvas) 的问题

html - 样式进度条——计算宽度

javascript - 附加到事件的原型(prototype)方法未定义

javascript - 设置最大高度而不溢出

javascript - 根据在 javascript 和 asp.net 中选中的复选框禁用/启用 HtmlSelect

JavaScript 和 HTML : Event Listener Is Not Producing Text Alert As Expected; ReferenceError: button is not defined

html - 多行跨度表现得像一个 block ?

html5-canvas - 将键盘事件附加到 html5 Canvas