Tabuada com DOM
Beleza galera? Comecei a fazer um projetinho de tabuada aqui. O problema é que fiz os passos só que não apresenta resultado. Na minha visão todos os dados estão corretos, o código DOM que transforma o texto String em HTML está correto.
Seguem os códigos abaixo:
HTML
CSS
JAVASCRIPT
Seguem os códigos abaixo:
HTML
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="css/style.css"> <script src="js/script.js" defer></script> <title>Tabuada JS</title> </head> <body> <h2>Digite o número e confirme para gerar a tabuada</h2> <form id="multiplication-form"> <div class="form-control"> <label for="number">Tabuada do:</label> <input type="number" name="number" id="number" value="10"> </div> <div class="form-control"> <label for="multiplicator">Multiplicar até:</label> <input type="number" name="multiplicator" id="multiplicator" value="10"> </div> <input type="submit" value="Calcular"> </form> <div id="multiplication-table"> <h2 id="multiplication-title">Tabuada do número <span></span></h2> <div id="multiplication-operations"> <p>Informe um número para calcular uma tabuada...</p> <div class="row"> <div class="operation">5 x 1 =</div> <div class="result">5</div> </div> <div class="row"> <div class="operation">5 x 2 =</div> <div class="result">10</div> </div> </div> </div> </body> </html>
CSS
*{ margin: 0; padding: 0; font-family: Helvetica; } body{ text-align: center; padding: 2rem; min-height: 100vh; background: linear-gradient(180deg, #DB4444 0%, #3f24dd 98%); } h2{ margin-bottom: 1rem; } #multiplication-form{ display: flex; justify-content: center; align-items: center; flex-wrap: wrap; margin: 1rem auto; max-width: 300px; padding: 1rem; background-color: #fff; border-radius: 1rem; color: #333; } .form-control{ display: flex; flex-direction: column; align-items: center; width: 100px; margin: 0 1rem; } .form-control label{ margin-bottom: 0.6rem; font-size: 0.8rem; font-weight: bold; } .form-control input{ margin-bottom: 1rem; flex: 1; padding: 0.6rem 0.4rem; border: 1px solid #333; width: 50px; border-radius: 5px; text-align: center; } #multiplication-form input[type="submit"]{ max-height: 50px; padding: 0.6rem 1.2rem; width: 200px; color: #fff; background-color: #333; border: 1px solid #333; border-radius: 5px; cursor: pointer; font-weight: bold; } /* CSS da Tabela*/ #multiplication-operations{ display: flex; flex-direction: column; align-items: center; align-items: 300px; margin: 1rem auto; padding: 2rem 1rem; background-color: #fff; color: #333; border-radius: 1rem; } #multiplication-operations .row{ display: flex; justify-content: center; border: 1px solid #ccc; border-bottom: none; padding: 0.5rem; width: 150px; } #multiplication-operations .row:last-child{ border-bottom: 1px solid #CCC; } #multiplication-operations .result { margin-left: 0.4rem; }
JAVASCRIPT
//seleção de elementos const multiplicationForm = document.querySelector("#multiplication-form"); const numberInput = document.querySelector("#number"); const multiplicationInput = document.querySelector("#multiplicator"); const multiplicationTable = document.querySelectorAll("#multiplication-operations") //funções const createTable = (number, multiplicatorNumber) => { multiplicationTable.innerHTML = ""; for (i = 1; i <= multiplicatorNumber; i++) { const result = number * i; const template = `<div class="row"> <div class="operation">$ x $ = </div> <div class="result">$ </div> </div>`; const parser = new DOMParser(); const htmlTemplate = parser.parseFromString(template, "text/html"); const row = htmlTemplate.querySelector(".row"); multiplicationTable.appendChild(row); } }; //eventos multiplicationForm.addEventListener("submit", (e) => { e.preventDefault(); const multiplicatonNumber = +numberInput.value; const multiplicatorNumber = +multiplicationInput.value; if (!multiplicatonNumber || !multiplicatorNumber) return console.log("Complete todos os campos!"); console.log(multiplicatonNumber, multiplicatorNumber); });
Geanderson Passos
Curtidas 0
Melhor post
Jose Santos
25/03/2024
eu tentei analisar o seu código para lhe ajudar, e primeiramente no template strings
para mostrar os números que o usuário que você usou, está incompleto, uma solução seria
já para exibir o resultados usando o construtor DOMparser, eu não identifiquei bem a causa do erro, mas uma solução mais viável e prática para a exibição
dos resultados seria:
const template = `<div class="row"> <div class="operation">$ x $ = </div> <div class="result">$ </div> </div>`;
para mostrar os números que o usuário que você usou, está incompleto, uma solução seria
const template = ` <div class="row"> <div class="operation">$ x $ = </div> <div class="result">$ </div> </div>`;
já para exibir o resultados usando o construtor DOMparser, eu não identifiquei bem a causa do erro, mas uma solução mais viável e prática para a exibição
dos resultados seria:
const createTable = (number, multiplicatorNumber) => { multiplicationTable.innerHTML = " "; for (i = 1; i <= multiplicatorNumber; i++) { const result = number * i; const template = ` <div class="row"> <div class="operation">$ x $ = </div> <div class="result">$ </div> </div>`; multiplicationTable.innerHTML 🕂= template } };
GOSTEI 1
Mais Respostas
Jose Santos
22/03/2024
Caso você queira uma solução mais elaborada, pode criar os elementos no DOM por meio do js:
const createTable = (number, multiplicatorNumber) => { multiplicationTable.innerHTML = " "; for (i = 1; i <= multiplicatorNumber; i++) { const result = number * i; const template = ` <div class="operation">$❴number❵ x $❴multiplicatorNumber❵ = </div> <div class="result">$❴result❵ </div> `; const parser = new DOMParser(); const htmlTemplate = parser.parseFromString(template, "text/html"); const row = document.createElement("div") row.setAttribute("class", "row") row.innerHTML 🕂= `$❴template❵` multiplicationTable.appendChild(row) } };
GOSTEI 1