2016-06-14 2 views
-2

Я делаю этот сайт для обмена свой собственный рецепт, я делаю поля ввода выше, и это Javascript возвращает ошибку:..Получение ошибки «Не удается прочитать свойство„AppendChild“неопределенной

Getting error "Cannot read property 'appendchild' of undefined.

Это так говорит о линии newTable.appendChild(createRow); я не могу показаться, чтобы выяснить, что случилось?

<!DOCTYPE html> 
<html> 
    <head> 
     <meta charset="utf-8"> 
     <link rel="stylesheet" type="text/css" href="bootstrap.css"> 
     <link rel="stylesheet" type="text/css" href="Baksnakk.css"> 
     <title>Baksnakk.no - Hovedside</title> 
    <style></style> 
    </head> 
    <body> 
     <div class="container-fluid"> 

      <div class="page-header"> 
       <div class="row"> 
        <div class="col-lg-4"></div> 
        <div class="col-lg-4"><h1>Baksnakk.no <small>Slagord.jpg</small></h1></div> 
        <div class="col-lg-4"></div> 
       </div> 
      </div> 

      <nav class="navbar navbar-default"> 
       <div class="container-fluid"> 
        <div class="row"> 
         <div class="col-sm-4"> 
          <ul class="nav navbar-nav"> 
           <li><a href="Baksnakk.html">Hjem</a></li> 
           <li><a href="Baksnakk - Kanelsnurrer.html">Kanelsnurrer</a></li> 
           <li><a href="Baksnakk - Custom.html">Lag din egen oppskrift!</a></li> 
          </ul> 
         </div> 
         <div class="col-sm-5"></div> 
         <div class="col-sm-3"> 
          <form class="navbar-form navbar-left" role="search"> 
           <div class="form-group"> 
            <input type="text" class="form-control" placeholder="Search"> 
           </div> 
           <button type="submit" class="btn btn-default">Submit</button> 
          </form> 
         </div> 
        </div> 
       </div> 
      </nav> 

      <div class="jumbotron"> 
       <div class="row"> 

        <div class="col-lg-6"> 
          <div class="input-group"> 
           <input type="text" class="form-control" placeholder="Navn på oppskrift..." aria-describedby="basic-addon2"> 
           <span class="input-group-addon" id="basic-addon2">og</span> 
           <input type="number" class="form-control" placeholder="Antall personer..."> 
           <span class="input-group-btn"> 
            <button class="btn btn-default" type="button">Legg til!</button> 
           </span> 
          </div> 
        </div> 

        <div class="col-lg-6"> 
         <div class="input-group"> 
          <input type="text" class="form-control" placeholder="Ingrediens..." aria-describedby="basic-addon2"> 
          <span class="input-group-addon" id="basic-addon2">og</span> 
          <input type="text" class="form-control" placeholder="Mengde..."> 
          <span class="input-group-addon" id="basic-addon2">og</span> 
          <input type="text" class="form-control" placeholder="Enhet..."> 
          <span class="input-group-btn"> 
           <button class="btn btn-default" type="button">Legg til!</button> 
          </span> 
         </div> 

        </div> 

       </div> 

       <div class="row"> 
        <div class="col-lg-12"> 
         <div class="input-group"> 
          <input type="text" class="form-control largeInput" placeholder="Beskrivelse av fremgangsmåte..."> 
          <span class="input-group-btn"> 
           <button class="btn btn-default largeInput" type="button">Legg til!</button> 
          </span> 
         </div> 
        </div> 
       </div> 

       <div class="row"> 
        <div class="col-lg-12"> 
         <div class="input-group"> 
          <input type="text" class="form-control" placeholder="Beskrivelse av fremgangsmåte, stegvis..."> 
          <span class="input-group-btn"> 
           <button class="btn btn-default" type="button">Legg til!</button> 
          </span> 
         </div> 
        </div> 
       </div> 

       <div class="row"> 
        <button class="btn btn-success newRecipie">Neste oppskrift!</button> 
       </div> 
      </div> 
    </body> 
    <script> 
     var headingButton = document.getElementsByClassName("btn btn-default") [1]; 
     var tableButton = document.getElementsByClassName("btn btn-default") [2] 
     var newRecipieButton = document.getElementsByClassName("btn btn-success newRecipie") [0]; 
     var containerFluid = document.getElementsByClassName("container-fluid") [0]; 

     var recipieCounter = 0; 

     function headingFunction() { 
      if (recipieCounter%2 == 0) { 
       recipieName = document.getElementsByClassName("form-control") [1].value; 
       nrPersons = document.getElementsByClassName("form-control") [2].value; 

       createJumbotron = document.createElement("div"); 
       createJumbotron.className = "jumbotron"; 
       containerFluid.appendChild(createJumbotron); 

       newJumbotron = document.getElementsByClassName("jumbotron") [1]; 
       createPanel = document.createElement("div"); 
       createPanel.className = "panel panel-default"; 
       newJumbotron.appendChild(createPanel); 

       newPanel = document.getElementsByClassName("panel panel-default") [0]; 
       createPanelHeading = document.createElement("div"); 
       createPanelHeading.className = "panel-heading"; 
       newPanel.appendChild(createPanelHeading); 

       newPanelHeading = document.getElementsByClassName("panel-heading") [0]; 
       createH2 = document.createElement("h2"); 
       createH2.className = "headingTwo"; 
       newPanelHeading.appendChild(createH2); 

       headingTwo = document.getElementsByClassName("headingTwo") [recipieCounter]; 
       headingTwo.innerHTML = recipieName + " - " + nrPersons + " personer"; 

       createTable = document.createElement("TABLE"); 
       createTable.classname = "table"; 
       newPanel.appendChild(createTable); 

       newTable = document.getElementsByClassName("table") [0]; 
       createRow = document.createElement("TR"); 
       createRow.className = "tableRow"; 
       newTable.appendChild(createRow); 

       newRow = document.getElementsByClassName("tableRow") [0]; 
       createCell = document.createElement("TD"); 
       createCell.className = "tableCell"; 
       newRow.appendChild(createCell); 

       newCell = document.getElementsByClassName("tableCell") [0]; 
       newCell.innerHTML = "Hei"; 

       console.log(recipieName); 
       console.log(nrPersons); 
      }else { 

      } 

     } 
     headingButton.addEventListener("click", headingFunction); 

     function tableFunction() { 



     } 
     tableButton.addEventListener("click", tableFunction); 

     function newRecipie() { 
      recipieCounter++; 
     } 
     newRecipieButton.addEventListener("click", newRecipie); 

    </script> 
</html> 
+0

Как мы выполняем ваш код? Где «HTML»? – Rayon

+4

В чем вопрос? Является ли ошибка непонятной? 'newTable', являющийся' undefined', означает, что 'document.getElementsByClassName (" table ") [0]' возвращает 'undefined', что означает, что у вас нет элемента с ** именем класса **' table'. Глядя на то, где вы пытались присвоить имя класса, видно, что у вас есть опечатка: 'createTable.classname =" table ";'. –

+0

@NikolaiScott Это означает, что вам нужно отступывать свой код. Быстрый ярлык для этого состоит в том, чтобы выделить весь ваш код без выступов и нажать Ctrl + K. –

ответ

2

Эта ошибка самоописания. Это говорит о том, что createTable не определено (не имеет значения), и поэтому вы не можете получить доступ к appendChild() на нем. д линия

newTable = document.getElementsByClassName("table")[0]; 

поэтому не найти элемент с классом table.

Это может произойти, если DOM не загружен во время выполнения скрипта. Чтобы избежать этого, завернуть все ваши DOM-манипулирование кода в window.onload блоке:

window.onload = function(){ 
    // your JS here 
} 

EDIT глядя на разметке кажется, что это не проблема, но я буду держать ответ здесь для процветания. Кроме того, getElementsByClassName не является предпочтительным способом выбора элементов. Обычно, если вы хотите однозначно идентифицировать элемент, вы используете id и getElementById.

+0

Я собираюсь добавить текст из массива позже, и я подумал, что использование getElementByClassName было наиболее полезным, потому что позже я мог использовать для циклов. –

+0

'gEBCN' абсолютно предпочтителен для случаев, когда имеет смысл выбирать по классу. Не все должно или должно иметь идентификатор. Тем не менее, @NikolaiScott не нужно делать выбор DOM вообще, так как элемент, который выбирается, уже удерживается переменной! Это должно быть просто 'createTable.appendChild (createRow);' –

+0

Ну, было решение! Спасибо @squint! Я все еще хочу сделать это так, как раньше. Потому что таким образом я мог бы все толкать с помощью переменной ... –

Смежные вопросы