TPop TPop - 12 days ago 4
Javascript Question

indexOf not returning correct index

Re: Hangman Game

Objective: after user guess a letter, retrieve the index of the letter in the word.

Issue: The number returned is not the correct index of the word. It's the 3rd to the last line of code.

I'm a newbie so go easy on me please :) This is so hard!

// JavaScript Document


$(document).ready(function() { // upon page load

var badGuesses; // reset bad guess counter
var alphabet = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Z"]; // array of letters to choose
$("#lettersRemaining").html(alphabet); // gets elements of the alphabet array and displays on UI

// N E W G A M E B U T T O N C L I C K E D

$("#newGame").click(function() { // when user clicks on Start New Game button...

$("#status").hide(); // upon game reset hide the status section stating game over
badGuesses = 0; // reset guess counter which is used later
var wordCollection = ["mansion", "statue", "gorilla", "notebook", "smartphone", "illustration", "photo", "elegant", "arborist", "keyboard", "calendar", "capital", "textbook", "horrible", "library"]; // array of words
var theWord = wordCollection[Math.floor(Math.random()*wordCollection.length)]; // randomly selects a word
console.log("theWord is ....");
console.log(theWord);

var theWordLength = theWord.length; // Get number of characters in randomly selected word
console.log("theWordLength is ....");
console.log(theWordLength);

// D I S P L A Y D A S H E S

var combineDashes = []; // creates an array to hold the number of dashes inside the for loop
for (var i = theWordLength; i > 0; i--)
{
combineDashes.push(" - "); // each loop through adds a dash to the array
}
combineDashes.join(" "); // joins cumulative dashes and converts to a string
$("#dashes").html(combineDashes); // displays dashes on UI

});


// G U E S S L E T T E R

$("#guessLetter").click(function(theWord) { // when user clicks on the Guess Letter button pass in theWord value ....
var letter = $("#theLetter").val(); // gets the letter the user is guessing
console.log("letter is ...");
console.log(letter);

// Is the letter a good or bad guess?
var letterContained = theWord.toString().indexOf(letter); // <-- NOT WORKING!! returns index from theWord for the letter guessed; -1 means bad guess
console.log("letterContained is...");
console.log(letterContained);


});

});

Answer

This is all in the comments above, but the problem was that theWord needed to be declared at the same level as badGuesses (and assigned but not declared in newGame, just like badGuesses) and be removed as a parameter to guessLetter. Then guessLetter had the desired value of theWord, and the indexOf call worked.

Comments