I am lost and I would like to understand where is my error, or what should I check to figure it out.
I am building a simple Rock Scissors game. I can’t return any values from Event Listener function to a variable. Console.log returns undefined.
function listeningToPlayer () {
const btn = document.querySelectorAll(".btn");
btn.forEach(btn => btn.addEventListener ('click', (e) => {
if(e.target.innerHTML == "Rock") {
return "rock"
} else if (e.target.innerHTML == "Paper"){
return "paper";
} else if (e.target.innerHTML == "Scissors") {
return "scissors";
}
}))
}
// Variables with computer and player choices
let computer_selection = computerPlay()
let player_selection = listeningToPlayer()
console.log(player_selection)
Thanks in advance. Also, if someone could tell me if my Event Listener is very bad, I would be grateful. “innerHTML” was the best way I could figure out.
If my coding is ridiculous, sorry for that – I have started few days ago!
Advertisement
Answer
An event listener is a function that gets executed when an event happens. In this case a click. You register what must happen when the click occurs. In this case you like to update the game state with the selected value.
A more standard way of setting data on a html element is using the data
attribute. For example: <button data-choice="paper">Paper</button>
.
HTML:
<button class="btn" data-choice="paper">Paper</button>
<button class="btn" data-choice="scissors">Scissors</button>
<button class="btn" data-choice="rock">Rock</button>
<pre id="output"></pre>
Js:
const randomChoice = () => (['paper', 'scissors', 'rock'][Math.floor(Math.random() * 3)]);
const gameState = {
player: null,
computer: randomChoice()
}
const out = document.querySelector('#output');
const btns = document.querySelectorAll(".btn");
out.innerHTML = JSON.stringify(gameState, null, 2)
for (const btn of btns) {
btn.addEventListener('click', e => {
gameState.player = e.target.dataset.choice;
out.innerHTML = JSON.stringify(gameState, null, 2);
});
}