[英]Trying to learn addEventListener and my code isn't working
我正在嘗試創建一個魔術8球。 我已經在數組的頂部添加了答案,添加了選擇隨機答案的代碼,並且當單擊按鈕時,應該將所述隨機答案放置在div的ap標簽中。 實際上,它在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。 這里也有一些問題,但是我還沒有找到解決我問題的方法。
嘗試重新排序HTML中<script>
標記的位置,以便在加載/解析DOM之后運行腳本。 運行腳本時,將不會顯示您要添加單擊偵聽器的button
,因為腳本是在<body>
DOM內容加載並准備就緒之前從<head>
標記運行的。
嘗試以下調整:
<!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);
您的腳本已加載到標題中。 它是在頁面未完成加載的情況下執行的,因此您嘗試將偵聽器附加到尚不存在的button元素。 將其移動到正文部分的底部:
<!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">
// deleted
<title>8 Ball</title>
</head>
<body>
<div class="ball">
<div id="display">
<p id="output"></p>
</div>
</div>
<button id="button">Answer</button>
<script src="script.js"></script> // pasted here
</body>
</html>
問題是您的randomAnswer
需要在函數內部定義,以便每次按下按鈕時都randomAnswer
答案。 在函數之外,它是在頁面加載時定義的,每次的答案都是相同的。
這是更新的代碼段:
var answers = ["Yes!", "Absolutely!", "Not A Chance", "No", "Ask Me Later", "Not Yet" ]; function myFunction() { //random answer function displays random in the output id var randomAnswer = answers[Math.floor(Math.random() * answers.length)]; document.getElementById('output').innerHTML = randomAnswer; } document.getElementById('button').addEventListener('click', myFunction);
<!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>
移動
//random answer function displays random in the output id var randomAnswer = answers[Math.floor(Math.random()*answers.length)];
在您的函數內部,如下所示:
function myFunction(){ var randomAnswer = answers[Math.floor(Math.random()*answers.length)]; document.getElementById('output').innerHTML = randomAnswer; }
document.getElementById('button').addEventListener('click', myFunction=()=>{
//[UPDATE] Move the random answer computation inside of myFunction()
var randomAnswer = answers[Math.floor(Math.random()*answers.length)];
document.getElementById('output').innerHTML = randomAnswer;
});
將邏輯放在函數中,每次調用時都會創建邏輯。 或者您可以將函數分配給這樣的變量:
var answers = ["Yes!", "Absolutely!", "Not A Chance", "No",
"Ask Me Later", "Not Yet"];
let myFunction = function(){
//[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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.