2017-02-12 6 views
-1

私はJavascriptには比較的新しいですが、私の最初のプロジェクトとしてライブラリのウェブサイトを作ることに決めました。このプロジェクトを作っているうちに、配列から値を使ってinnerHTMLを設定しようとしたときにエラーが発生しました。私は私のエラーを知らせる取得する場所パートAで(Javascript)配列を使用して 'innerHTML'を参照するとエラーが発生しました

var catalog = []; 

function book (title, firstName, lastName, number, publisher, image, checkedOut) { 
    this.title = title; 
    this.firstName = firstName; 
    this.lastName = lastName; 
    this.number = number; 
    this.publisher = publisher; 
    this.image = image; 
    this.isCheckedOut = checkedOut; 

} 
function addToCatalog (entry){ 
    entry.number = catalog.length ; 
    catalog[entry.number] = entry; 
} 
$newbook = new book("Lost in the Woods", "Hubert", "Holmes", "3", "Junior Scholastic", "https://marketplace.canva.com/MAB5W63LDsw/1/0/thumbnail_large/canva-woods-thriller-e-book-cover-MAB5W63LDsw.jpg", false); 
addToCatalog($newbook); 

$newbook = new book("To Kill A Mockingbird", "Harper", "Lee", "1", "Junior Scholastic", "https://s-media-cache-ak0.pinimg.com/736x/a0/96/ff/a096ff3bafb7786b59ef9ba9d3e7ddf2.jpg", false); 
addToCatalog($newbook); 

var address = document.createElement("DIV"); 
address.setAttribute("class", "eachBook"); 
var picture = document.createElement("img"); 
picture.setAttribute("src", "http://www.iconsdb.com/icons/preview/gray/literature-xxl.png"); 
picture.setAttribute("class", "bookImg"); 
picture.setAttribute("alt", "Auburn Library Book"); 
var gtitle = document.createElement("h4"); 
gtitle.setAttribute("class", "bTitle"); 
var dname = document.createElement("p"); 
dname.setAttribute("class", "bName"); 
var button = document.createElement("button"); 
button.setAttribute("class", "checkout"); 
checkout = document.createTextNode("Checkout"); 
button.appendChild(checkout); 
//Text in button 
var available = document.createElement("p"); 
available.setAttribute("class", "available"); 
avail = document.createTextNode("Available"); 
available.appendChild(avail); 
//text in available 

function createBooks(){ 
    document.getElementById("displayBooks").appendChild(address); 
    address.appendChild(picture); 
    address.appendChild(gtitle); 
    address.appendChild(dname); 
    address.appendChild(button); 
    address.appendChild(available); 
} 
function write(){ 
    var x = 0; 
    var arr; 
    while (x < catalog.length){ 
     createBooks(); 
     arr = document.getElementsByClassName("bTitle"); 
     arr[x].innerHTML = catalog[x].title; //Part A 
     arr = document.getElementsByClassName("bName"); 
     arr[x].innerHTML = catalog[x].firstName +" "+ catalog[x].lastName;//Part B 
     arr = document.getElementsByTagName("img"); 
     arr[x].src = catalog[x].image; 
     x++; 
    } 

} 

window.onload = function(){ 
    write(); 
}; 

がある:ここに私の(汚い)コードである「TypeError例外を:未定義の 『innerHTMLプロパティ』プロパティを設定できません」。しかし、私はアラート機能を使用し、カタログ[0](Lost in the Woods)の値を得ました。また、コードがループを最初に通過した後にしか失敗しないように思えます。なぜなら、最初に正しく機能するようになるからです。私はそれが問題を完全に引き起こしてinnerHTMLかもしれないと思う、私は部分Aをコメントするとき、パートBは同じエラーを持つように見えます。 私はこの間違いを理解するのを手伝ってください。また、私はこのサイトとJavascriptの両方の初心者ですので、より良い角度からこの問題にアプローチする方法を教えてください。また、初心者にもやさしく答えてください(できる場合)

+0

あなたのwhileループ条件は 'x

+0

ここに[SoloLearn](https://code.sololearn.com/WpZyzqUe11A5)のリンクです – SirLucidus

+0

'innerText'を試してみてください –

答えて

1

親のスコープに 'address'要素を作成するので、同じ要素を追加するcreateBooksで作成します。同じ要素を追加すると、それを削除してから追加して、そこに2番目のdivを持つことはできません。あなたの配列の長さが2である理由ですが、あなたが持っている「アドレス」div要素の数は、ちょうどあなたのコードブロックは

document.getElementById("displayBooks").appendChild(address); 
前に、 createBooks()

var address = document.createElement("DIV"); 

で始まるのみ1.

を移動しています

var catalog = []; 
 

 
function book (title, firstName, lastName, number, publisher, image, checkedOut) { 
 
    this.title = title; 
 
    this.firstName = firstName; 
 
    this.lastName = lastName; 
 
    this.number = number; 
 
    this.publisher = publisher; 
 
    this.image = image; 
 
    this.isCheckedOut = checkedOut; 
 

 
} 
 
function addToCatalog (entry){ 
 
    entry.number = catalog.length ; 
 
    catalog[entry.number] = entry; 
 
} 
 
$newbook = new book("Lost in the Woods", "Hubert", "Holmes", "3", "Junior Scholastic", "https://marketplace.canva.com/MAB5W63LDsw/1/0/thumbnail_large/canva-woods-thriller-e-book-cover-MAB5W63LDsw.jpg", false); 
 
addToCatalog($newbook); 
 

 
$newbook = new book("To Kill A Mockingbird", "Harper", "Lee", "1", "Junior Scholastic", "https://s-media-cache-ak0.pinimg.com/736x/a0/96/ff/a096ff3bafb7786b59ef9ba9d3e7ddf2.jpg", false); 
 
addToCatalog($newbook); 
 

 

 
function createBooks(){ 
 
    
 
var address = document.createElement("DIV"); 
 
address.setAttribute("class", "eachBook"); 
 
var picture = document.createElement("img"); 
 
picture.setAttribute("src", "http://www.iconsdb.com/icons/preview/gray/literature-xxl.png"); 
 
picture.setAttribute("class", "bookImg"); 
 
picture.setAttribute("alt", "Auburn Library Book"); 
 
var gtitle = document.createElement("h4"); 
 
gtitle.setAttribute("class", "bTitle"); 
 
var dname = document.createElement("p"); 
 
dname.setAttribute("class", "bName"); 
 
var button = document.createElement("button"); 
 
button.setAttribute("class", "checkout"); 
 
checkout = document.createTextNode("Checkout"); 
 
button.appendChild(checkout); 
 
//Text in button 
 
var available = document.createElement("p"); 
 
available.setAttribute("class", "available"); 
 
avail = document.createTextNode("Available"); 
 
available.appendChild(avail); 
 
//text in available 
 
    
 
    document.getElementById("displayBooks").appendChild(address); 
 
    address.appendChild(picture); 
 
    address.appendChild(gtitle); 
 
    address.appendChild(dname); 
 
    address.appendChild(button); 
 
    address.appendChild(available); 
 
} 
 
function write(){ 
 
    var x = 0; 
 
    var arr; 
 
    while (x < catalog.length){ 
 
     createBooks(); 
 
     arr = document.getElementsByClassName("bTitle"); 
 
     arr[x].innerHTML = catalog[x].title;//Part A 
 
     arr = document.getElementsByClassName("bName"); 
 
     arr[x].innerHTML = catalog[x].firstName +" "+ catalog[x].lastName;//Part B 
 
     arr = document.getElementsByTagName("img"); 
 
     arr[x].src = catalog[x].image; 
 
     x++; 
 
    } 
 
    
 
} 
 

 
window.onload = function(){ 
 
    write(); 
 
};
body { 
 
    background-color: #F5EBEB; 
 
    
 
} 
 
#header { 
 
    background-image: url("http://il2.picdn.net/shutterstock/videos/2990449/thumb/1.jpg") ; 
 
    font-family: Rockwell, Tahoma, Arial; 
 
    color: #FFFFFF; 
 
    display: block; 
 
    
 
} 
 

 
#header p{ 
 
    font-family: Arial, "Times New Roman"; 
 
} 
 

 
#panel{ 
 
    background-color: #922724; 
 
    font-family: Rockwell, Arial; 
 
    padding: 5px 5px 5px 5px; 
 
    margin: 5px 5px 5px 5px ; 
 
    
 
} 
 
.dropdown{ 
 
    display: block; 
 
    position: relative; 
 
} 
 

 
.dropbtn{ 
 
    background-color: #FFFFFF; 
 
    border: none; 
 
    color: #922724; 
 
    padding: 15px 32px; 
 
    text-align: center; 
 
    text-decoration: none; 
 
    display: inline-block; 
 
    font-size: 16px; 
 
    font-family: Rockwell; 
 
    font-weight: bold; 
 
    
 
} 
 

 
.dropbtn:hover{ 
 
    color: #700502; 
 
} 
 

 
.content{ 
 
    background-color: #FFFFFF; 
 
    border: none; 
 
    color: #922724; 
 
    padding: 5px 5px; 
 
    text-align: center; 
 
    text-decoration: none; 
 
    font-size: 16px; 
 
    font-family: Rockwell; 
 
    overflow: auto; 
 
    position: relative; 
 
    display: none; 
 
} 
 
.content li{ 
 
    color: black; 
 
    display: block; 
 
    float: left; 
 
    position: relative; 
 
    cursor: pointer; 
 
} 
 
.dropdown:hover .content{ 
 
    display: inline-block; 
 
} 
 
.content li:hover{ 
 
    background-color: #DDDDDD; 
 
    display: block; 
 
} 
 

 
#displayBooks{ 
 
    font-family: Rockwell; 
 
    border-color: #1B0807; 
 
    border-style: solid; 
 
    border-width: 3px; 
 
    padding: 5px 5px 5px 5px; 
 
    margin: 5px 5px 5px 5px ; 
 
} 
 

 
.eachBook{ 
 
    font-family: Rockwell; 
 
    background-color: #FFFEFF; 
 
    border-style: solid none solid none; 
 
    border-color: #DDD; 
 
    border-width: 2px; 
 
    padding: 5px 5px 5px 5px; 
 
    margin: 5px 5px 5px 5px ; 
 
    overflow: auto; 
 
} 
 
.eachBook h4{ 
 
    font-size: 20px 
 
} 
 

 
.bookImg{ 
 
    width: 150px; 
 
    height:225px; 
 
    overflow: auto; 
 
    float: left; 
 
    margin: 5px 5px 5px 5px ; 
 
} 
 

 
.checkout{ 
 
    background-color: #DDDDDD; 
 
    border: none; 
 
    color: #922724; 
 
    padding: 5px 20px; 
 
    text-align: center; 
 
    text-decoration: none; 
 
    display: inline-block; 
 
    font-size: 16px; 
 
    font-family: Rockwell; 
 
    font-weight: bold; 
 
} 
 

 
.checkout:hover{ 
 
    background-color: #922724; 
 
    color: #FFFFFF; 
 
} 
 
.available{ 
 
    color: #2F2; 
 
    font-weight: bold; 
 
    
 
} 
 

 
.unavailable{ 
 
    color: #F22; 
 
    font-weight: bold; 
 
    
 
}
 <div id="header"> 
 
     <h1>Welcome to Auburn Library</h1> 
 
     <p>Where knowledge is truly power.</p> 
 
     </div> 
 
     
 

 
     <div id="panel"> 
 
     <div class="dropdown"> 
 
     <button class ="dropbtn">Display Books...</button> 
 
     <ul class="content"> 
 
     <li> Alphabeticaly (A - Z) </li> 
 
     <li> Alphabeticaly (Z - A)</li> 
 
     <li> By Author (A - Z)</li> 
 
     <li> By Author (Z - A)</li> 
 
     <li> By Number (Low - High)</li> 
 
     <li> By Number (High - Low)</li> 
 
     </ul> 
 
     </div> 
 
     <form> 
 
     
 
     </form> 
 
     <!-- Right next to it is a checkbox: only "in" books or all books --> 
 
     </div> 
 
     <div id="displayBooks"> 
 
     <h2 style="text-align: center;">Book Catalog </h2> 
 
     
 
     
 
     
 
     
 

 
     </div>

ここで実行可能なスニペットです

関連する問題