Fórum Tabuada com DOM #622142
22/03/2024
0
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | <!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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | *{ margin : 0 ; padding : 0 ; font-family : Helvetica ; } body{ text-align : center ; padding : 2 rem; min-height : 100 vh; background : linear-gradient( 180 deg, #DB4444 0% , #3f24dd 98% ); } h 2 { margin-bottom : 1 rem; } #multiplication-form{ display : flex; justify- content : center ; align-items: center ; flex-wrap: wrap; margin : 1 rem auto ; max-width : 300px ; padding : 1 rem; background-color : #fff ; border-radius: 1 rem; color : #333 ; } .form-control{ display : flex; flex- direction : column; align-items: center ; width : 100px ; margin : 0 1 rem; } .form-control label{ margin-bottom : 0.6 rem; font-size : 0.8 rem; font-weight : bold ; } .form-control input{ margin-bottom : 1 rem; flex: 1 ; padding : 0.6 rem 0.4 rem; border : 1px solid #333 ; width : 50px ; border-radius: 5px ; text-align : center ; } #multiplication-form input[type= "submit" ]{ max-height : 50px ; padding : 0.6 rem 1.2 rem; 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 : 1 rem auto ; padding : 2 rem 1 rem; background-color : #fff ; color : #333 ; border-radius: 1 rem; } #multiplication-operations .row{ display : flex; justify- content : center ; border : 1px solid #ccc ; border-bottom : none ; padding : 0.5 rem; width : 150px ; } #multiplication-operations .row:last-child{ border-bottom : 1px solid #CCC ; } #multiplication-operations .result { margin-left : 0.4 rem; } |
JAVASCRIPT
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | //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
Curtir tópico
+ 0
Responder
Post mais votado
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:
1 2 3 4 | 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
1 2 3 4 5 | 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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 } }; |
Jose Santos

Responder
Gostei + 1
Mais Posts
25/03/2024
Jose Santos
Caso você queira uma solução mais elaborada, pode criar os elementos no DOM por meio do js:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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) } }; |
Responder
Gostei + 1
Clique aqui para fazer login e interagir na Comunidade :)