0

Using local storage I created an array to hold the flashcards that the user wants to make. However, when I shift to the next page the divs in Javascript aren't appending to the div in HTML.

User input goes into createset.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div id="users-set">
        <div id="title-desc">
    <input type="text" placeholder="Title" value="">
    <input type="text" placeholder="Description" value="">
</div>
<div id="t-d">
    <div class="individualTerm"> 
    <input type="text" placeholder="Term" value="" class="term" id="term1">
    <input type="text" placeholder="Definition" value="" class="definition" id="definition1">
    </div>
</div>
    <button id="addterm">Add</button>
    <button id="createset"><a href="setpage.html">Create Set</a></button>
</div>
<script src="createset.js"></script>
</body>
</html>

and then goes into setpage.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Flashcard Set</title>
    <link rel="stylesheet" href="style.css">
</head>
<body id="bodypart">
    <h1>Chemistry Quiz</h1>
    <div id="flashcards">
        <div class="cardcontainer" >
        <div class="card fade" >
            <div class="front" ><h2 class="termText"></h2></div>
            <div class="back"><h2 class="definitionText"></h2></div>
        </div>
    </div>
    <a class="prev" onclick="plusSlides(-1)">&#10094;</a>
    <a class="next" onclick="plusSlides(1)">&#10095;</a>
    </div>
    <script src="script.js"></script>
    <script src="createset.js"></script>
</body>
</html>

The javascript for the create set is:

const submit = document.getElementById('createset')
const addTerm = document.getElementById('addterm')
const termDiv = document.getElementById('t-d')
const setBody = document.getElementById("bodypart")
var termNums = 1
const flashcardContainer = document.getElementById('flashcards')





if (submit) {
    submit.addEventListener("click", createSet)
}
if (addTerm) {
    addTerm.addEventListener("click", addTD)
}



function createSet() {
    const value = document.getElementsByClassName('definition')[0].value
    
    //terms
    var terms = document.querySelectorAll('.term')
    let termsArr = Array.prototype.map.call(terms, function(e) {
        return e.value
    })
    console.log(termsArr)
    localStorage.setItem("terms", JSON.stringify(termsArr))
// definitions
    var defs = document.querySelectorAll('.definition')
    let defsArr = Array.prototype.map.call(defs, function(e) {
        return e.value
    })
    console.log(defsArr)
    localStorage.setItem("definitions", JSON.stringify(defsArr))
    //importSets()
  
    var retrieveTerms = localStorage.getItem("terms")
    console.log(retrieveTerms)
    document.addEventListener("DOMContentLoaded", function() {
        console.log("document")
    for (i = 0; i < retrieveTerms.length; i++) {
        importSets(i)
        console.log(i)
    }
})
}
    
    


function addTD() {
    termNums += 1
    var tempDiv = document.createElement('div')
    tempDiv.setAttribute('class', 'individualTerm')
    var term = document.createElement('input')
    var definition = document.createElement('input')
    term.setAttribute('type', 'text')
    term.setAttribute('placeholder', 'Term')
    term.setAttribute('id', 'term'+termNums)
    term.setAttribute('class', 'term')
    definition.setAttribute('type', 'text')
    definition.setAttribute('placeholder', 'Definition')
    definition.setAttribute('id', 'definition'+termNums)
    definition.setAttribute('class', 'definition')
    termDiv.append(tempDiv)
    tempDiv.append(term)
    tempDiv.append(definition)
   // console.log(terms)
}

// flashcard page imports

function importSets(term) {
    const cardContainer = document.createElement('div')
    const cardFade = document.createElement('div')
    const front = document.createElement('div')
    const back = document.createElement('div')
    const termText = document.createElement('h2')
    const definitionText = document.createElement('h2')
    cardContainer.setAttribute('class', 'cardcontainer')
    cardFade.setAttribute('class', 'card fade')
    front.setAttribute('class', 'front')
    back.setAttribute('class', 'back')
    termText.setAttribute('class', 'termText')
    definitionText.setAttribute('class', 'definitionText')
    termText.innerHTML = term
    definitionText.setAttribute('value', 'definition')
    flashcardContainer.append(cardContainer)
   /* cardContainer.append(cardFade)
    cardFade.append(front)
    cardFade.append(back)
    front.append(termText)
    back.append(definitionText)*/
}

And the javascript for the flashcards is:

const cards = document.querySelectorAll(".card");
const cardcontainer = document.querySelectorAll('.cardcontainer')

/*for (let i = 0; i < card.length; i++) {
  addEventListener("click", (card) => {
    card.classList.toggle("flipCard");
    console.log("clicked");
  });
}*/

cards.forEach((e) => {
  e.addEventListener("click", () => {
    e.classList.toggle("flipCard");
  });
});


let slideIndex = 1;
showSlides(slideIndex);

function plusSlides(n) {
  showSlides(slideIndex += n);
}

function currentSlide(n) {
  showSlides(slideIndex = n)
}

function showSlides(n) {
  let i;
  
  let slides = document.getElementsByClassName("card");
  if (n > slides.length || n < slides.length) {
    slideIndex = 1;
  }
  for (i = 0; i < slides.length; i++) {
    slides[i].style.display = "none";
  }
  slides[slideIndex - 1].style.display = "block";
} ```

Thanks in advance!
  • 3
    This is a good opportunity for you to start familiarizing yourself with [using a debugger](https://stackoverflow.com/q/25385173/328193). When you step through the code in a debugger, which operation first produces an unexpected result? What were the values used in that operation? What was the result? What result was expected? Why? To learn more about this community and how we can help you, please start with the [tour] and read [ask] and its linked resources. – David Jun 13 '23 at 13:24
  • 1
    `` - `button` and `a` are both interactive elements, and as such MUST NOT be nested. – CBroe Jun 13 '23 at 13:27
  • 2
    That weird mixture of click functionality and linking somewhere, is likely what causes your problem here to begin with. – CBroe Jun 13 '23 at 13:28
  • Also `let termsArr = Array.prototype.map.call(terms, function(e) { return e.value })` is the same as `let termsArr = [...terms].map(e => e.value);` – mplungjan Jun 13 '23 at 13:50
  • You cannot use `document.addEventListener("DOMContentLoaded"` in any interactive event handler – mplungjan Jun 13 '23 at 13:51

0 Answers0