How can I remove this error from my console?

Viewed 210

I receive the following error:

Uncaught ReferenceError: notesObj is not defined
    at HTMLButtonElement.<anonymous> (apps.js:14)

I could store the object earlier in the local storage and there was no error generated. But after the removal of the 'card' division after 'your notes' it is now difficult for me to remove the error.

//shownotes();
//If user add a note, add it to the local storage
let addBtn = document.getElementById('addBtn')
addBtn.addEventListener('click', function(e) {
  let addTxt = document.getElementById('addTxt');
  let notes = localStorage.getItem('notes');
  if (notes == null) {
    notesObj = [];
  } else {
    nodesObj = JSON.parse(notes);
  }
  notesObj.push(addTxt.value)
  localStorage.setItem('notes', JSON.stringify(notesObj));
  addTxt.value = '';
  console.log(notesObj);
  shownotes();
})

function shownotes() {
  let notes = localStorage.getItem('notes');
  if (notes == null) {
    notesObj = [];
  } else {
    nodesObj = JSON.parse(notes);
  }
  let html = '';
  notesObj.forEach(function(element, index) {
    html += `<div class="card my-3 mx-3" style="width: 18rem;">
            <div class="card-body">
                <h5 class="card-title">Notes ${index + 1}</h5>
                <p class='card-text'>${element}</p>
                <a href="#" class="btn btn-success my-3">Add Notes</a>
                <buttom href="#" class="btn btn-danger my-3">Delete notes</button>
            </div>
        </div>`
  });
  let notesElm = document.getElementById('notes')
  if (notes.length != 0) {
    notesElm.innerHTML = html;
  } else {
    notesElm.innerHTML = `Nothing to show! Use 'Add notes section above to add notes `
  }
}
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Make notes!</title>
  <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous">
</head>

<body>
  <nav class="navbar navbar-expand-lg navbar-dark bg-dark">
    <div class="container-fluid">
      <a class="navbar-brand" href="#">Navbar</a>
      <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
      </button>
      <div class="collapse navbar-collapse" id="navbarSupportedContent">
        <ul class="navbar-nav me-auto mb-2 mb-lg-0">
          <li class="nav-item">
            <a class="nav-link active" aria-current="page" href="#">Home</a>
          </li>
        </ul>
        <form class="d-flex">
          <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
          <button class="btn btn-outline-success" type="submit">Search</button>
        </form>
      </div>
    </div>
  </nav>
  <div class="container my-3 text-center">
    <h1>Magic notes</h1>
    <div class="card">
      <div class="card-body">
        <h5 class="card-title">Quick notes</h5>
        <div class="form-floating">
          <textarea class="form-control" id="addTxt" rows="3" style="height: 100px"></textarea>
          <!-- <label for="floatingTextarea2">Add your notes here</label> -->
        </div>
        <button href="#" class="btn btn-primary my-3" id="addBtn">Add notes</button>
      </div>
    </div>
  </div>
  <hr>
  <h1 class="text-center">Your notes</h1>
  <hr>
  <div id="notes" class="row container-fluid">
  </div>
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/js/bootstrap.bundle.min.js" integrity="sha384-ygbV9kiqUc6oa4msXn9868pTtWMgiQaeYH7/t7LECLbyPA2x65Kgf80OJFdroafW" crossorigin="anonymous"></script>
</body>

</html>

2 Answers

Well, from the code you provided, it appears to me that you try to use nodesObj before it was ever defined anywhere. I think you meant notesObj. Either define nodesObj like this, or fix the typo.

You may want to do something like

Now my java script code is from here.
var nodesObj = new Array(); // Declare the variable BEFORE using it anywhere.

console.log('This is the notes app.')
//shownotes();
//If user add a note, add it to the local storage
let addBtn = document.getElementById('addBtn')
addBtn.addEventListener('click', function (e) {
    let addTxt = document.getElementById('addTxt');
    let notes = localStorage.getItem('notes');
    if (notes == null) {
        notesObj = [];
    }
    else {
        nodesObj = JSON.parse(notes);
    }
    notesObj.push(addTxt.value)
    localStorage.setItem('notes', JSON.stringify(notesObj));
    addTxt.value = '';
    console.log(notesObj);
    shownotes();
})

function shownotes() {
    let notes = localStorage.getItem('notes');
    if (notes == null) {
        notesObj = [];
    }
    else {
        nodesObj = JSON.parse(notes);
    }
    let html = '';
    notesObj.forEach(function (element, index) {
        html += `<div class="card my-3 mx-3" style="width: 18rem;">
        <div class="card-body">
            <h5 class="card-title">Notes ${index + 1}</h5>
            <p class='card-text'>${element}</p>
            <a href="#" class="btn btn-success my-3">Add Notes</a>
            <buttom href="#" class="btn btn-danger my-3">Delete notes</button>
        </div>
    </div>`
    });
    let notesElm = document.getElementById('notes')
    if (notes.length != 0) {
        notesElm.innerHTML = html;
    }
    else {
        notesElm.innerHTML = `Nothing to show! Use 'Add notes section above to add notes `
    }
}

you write somethings wrong test it

console.log('This is the notes app.')
//shownotes();
//If user add a note, add it to the local storage
let addBtn = document.getElementById('addBtn')
var nodesObj = new Array();
var notesObj = new Array();
addBtn.addEventListener('click', function (e) {
    let addTxt = document.getElementById('addTxt');
    let notes = localStorage.getItem('notes');
    if (notes == null) {
        notesObj = [];
    }
    else {
        nodesObj = JSON.parse(notes);
    }
    notesObj.push(addTxt.value)
    localStorage.setItem('notes', JSON.stringify(notesObj));
    addTxt.value = '';
    console.log(notesObj);
    shownotes();
})

function shownotes() {
    let notes = localStorage.getItem('notes');
    if (notes == null) {
        notesObj = [];
    }
    else {
        nodesObj = JSON.parse(notes);
    }
    let html = '';
    notesObj.forEach(function (element, index) {
        html += `<div class="card my-3 mx-3" style="width: 18rem;">
        <div class="card-body">
            <h5 class="card-title">Notes ${index + 1}</h5>
            <p class='card-text'>${element}</p>
            <a href="#" class="btn btn-success my-3">Add Notes</a>
            <buttom href="#" class="btn btn-danger my-3">Delete notes</button>
        </div>
    </div>`
    });
    let notesElm = document.getElementById('notes')
    if (notes.length != 0) {
        notesElm.innerHTML = html;
    }
    else {
        notesElm.innerHTML = `Nothing to show! Use 'Add notes section above to add notes `
    }
}
Related