Welcome to the Treehouse Community
Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.
Looking to learn something new?
Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.
Start your free trialFarnoosh M
10,921 Pointshtml elements disappear when the script runs
Hi!
When I run the script to get the prompt, all the html text disappears from the page.
My script tag is at the end of the html before the closing body tag. But when I load the page, I see only my header image and every h1, h2 and p tag that I have put in the html is wiped out and I only get the prompt on an empty page. When I comment the prompt line in the script, the page shows normally.
The javascript itself runs just fine and the page shows correctly when I search something with the prompt or just cancel the prompt.
This is the link to the page to show what I mean.
// Where to show the records
var output = document.getElementById('output');
/*************************************************
students records: an array of objects
*************************************************/
var students = [
{
name: 'Farnoosh Mohri',
track: 'Full Stack Javascript',
achievements: 45,
points: 3705
}
, {
name: 'Brandon McFarland',
track: 'Frontend Development',
achievements: 36,
points: 2083
}
, {
name: 'Nicole Stardust',
track: 'Graphic Design',
achievements: 45,
points: 3705
}
, {
name: 'Shanon Goldwings',
track: 'Web Design',
achievements: 90,
points: 6502
}
, {
name: 'Ashton Warrior',
track: 'Game Design',
achievements: 45,
points: 8470
}
];
/*************************************************
A place to show the search results
*************************************************/
var recordBox = document.createElement('DIV');
//create a class attribute
var attr = document.createAttribute('class');
// give the class attribute a name value
attr.value = 'recBox';
//give that class attribute to the created div elm
recordBox.setAttributeNode(attr);
// add the created div to the output div on the page
output.appendChild(recordBox);
/*************************************************
Prompt the user for the search key
*************************************************/
var searchKey = prompt('Search a students by first and last name, seperated by space.');
// keep search key as normal case and use sKey in the loop
var searchKeyFound = false;
/*************************************************
Search the students records
*************************************************/
/* if the user DID enter something in the prompt. (because if the user don't put anything
in the prompt and clicked 'cancel' the value will be null and if they click 'ok' the value
will be an empty string */
if(searchKey!==null && searchKey!==''){
for (var i=0; i<students.length; i++){
// If the name exists (search everything in lowercase version)
if(searchKey.toLowerCase() === students[i].name.toLowerCase() ){
// show the records for that search;
recordBox.innerHTML= '<p>'+'<span> Name: </span>'+students[i].name +
' | '+'<span> Track: </span>'+ students[i].track +' | '+'<span> Achievements: </span>'+
students[i].achievements+' | '+'<span> Points: </span>' + students[i].points+'</p>';
// search key exists
searchKeyFound = true;
// exit the loop as soon as the name is found
// everything that comes after the break in the loop won't run!
break;
}
} //end of for loop
// the name wasn't found in the array
if(!searchKeyFound){
recordBox.innerHTML= '<p> Sorry! '+ searchKey + ' is not registered with us. </p>';
}
}// end of first if
/* the user didn't enter anything in the prompt and clicked 1.cancel or 2.ok
if(searchKey===null || searchKey==='')
*/
else {
recordBox.innerHTML= '<p> You didn\'t search a student. </p>';
}
And this is the html:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Student Record App</title>
<link rel='stylesheet prefetch' href='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css'>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<div class="container-fluid">
<header>
<!-- Site Banner -->
<img class="img-responsive page-banner" src="img/banner-education.jpg">
<a href='http://www.freepik.com/free-vector/back-to-school-banners_803108.htm'><span class= page-banner>Illustration Designed by Freepik<span></span></a>
</header>
<h1> Student Record| Working with Objects</h1>
<h2>Treehouse</h2>
<div id="introText">
<p>Student records will be shown here:</p>
</div>
<br/>
<!-- This is where the results will be shown by js -->
<div id="output"></div>
</div>
<script src="js/app.js"></script>
</body>
</html>
2 Answers
Henrik Hansen
23,176 PointsPerhaps you set the .innerHTML() on the wrong element?
Tushar Singh
Courses Plus Student 8,692 PointsShare your code!