Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

153
Vistas
Actualizar el precio total no funciona con los botones de entrada

Así que hice esta simple casilla de verificación y aplicación de sugerencias.

En este momento, si hago clic en un cuadro, actualiza el precio y la propina también, sin embargo, no actualiza el total del pedido.

Aquí está mi código:

 function updatePrice() { //Adding Food let items = 0; document.querySelectorAll("input[type=checkbox]").forEach((checkBox) => { if (checkBox.checked) { items += +checkBox.value; } }); //Adding Tip let tip = document.getElementById("tip"); tip = 0; document.addEventListener("click", (event) => { if (event.target.matches("input[type=button]")) { tip = event.target.value; document.getElementById("tip").textContent = `Tip: $${tip}`; } }); //Calculating Totals let orderTotal = items + tip; document.getElementById("price").textContent = `Food Total: $${( items / 100 ).toFixed(2)}`; document.getElementById("total").textContent = `Your order total is: $${( orderTotal / 100 ).toFixed(2)}`; }
 <div class="menu-items"> <h2>Order Details</h2> <div> <input type="checkbox" name="item1" value="1000" onClick="updatePrice()"> <label for="item1">12 piece wings $10</label> </div> <div> <input type="checkbox" name="item2" value="700" onClick="updatePrice()"> <label for="item2">6 piece wings $7</label> </div> <div> <input type="checkbox" name="item3" value="300" onClick="updatePrice()"> <label for="item3">Large fries $3</label> </div> </div> <div class="payment"> <h2>Payment Summary</h2> <p id="price">Food Total: $0.00</p> <p id="fee">Delivery Fee $0.00</p> <p id="tip">Tip: $0.00</p> <input type="button" value="3"> <input type="button" value="5"> <input type="button" value="10"> <p id="total">Your order total is: $0.00</p> </div>

Parece que la propina no se mueve más allá de la función, por lo que cuando creo la variable orderTotal, el valor de la propina no se agrega

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

no actualiza el total del pedido

Porque no hay código para hacer eso. Esto es lo que hace el código cuando hace clic en un botón de "consejo":

 tip = event.target.value; document.getElementById("tip").textContent = `Tip: $${tip}`;

Como puede ver, nada en esta operación afecta el orderTotal o la visualización de ese total. También puede actualizarlos escribiendo código para actualizarlos:

 // update tip tip = event.target.value; document.getElementById("tip").textContent = `Tip: $${tip}`; // update total // with calculations because your other values are multiplied by 100 for some reason document.getElementById("total").textContent = `Your order total is: $${( (orderTotal + (tip * 100)) / 100 ).toFixed(2)}`;

Algunas notas adicionales...

  • Su función updateTotal vuelve a vincular los controladores de clics con document.addEventListener cada vez que se ejecuta. Probablemente esto no sea lo que desea y puede generar errores. Separe el enlace de los controladores de eventos de la lógica ejecutada por esos controladores.
  • Los valores que se utilizan están prácticamente garantizados para causar confusión en algún momento. Elige un estándar y apégate a él. ¿Los valores están en "dólares" o en "centavos"? Si se apega a un estándar, no tendrá que seguir ensuciando el código con operaciones * 100 y / 100 solo para que funcione.
  • Para algunos elementos tiene atributos onClick en línea, para otros está usando document.addEventListener . ¿Por qué hacerlos diferentes? Elija uno (idealmente el último) y sea coherente con él, de lo contrario, es probable que se confunda.
about 4 years ago · Juan Pablo Isaza Denunciar

0

Lea más sobre let
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let
Está definiendo una variable de alcance dentro de la función y cuando hace clic en el botón no funciona porque no hay ningún evento para llamar a la función.
Después de eso, puede definir un objeto fuera de la función que almacene sus datos cuando desee llamar a la función de diferentes maneras.

 let data = { items: 0, tip: 0 }; const buttons = document.querySelectorAll("input[type=button]"); buttons.forEach((b) => { b.addEventListener("click", (event) => { if (event.target.matches("input[type=button]")) { data.tip = parseInt(event.target.value); document.getElementById("tip").textContent = `Tip: $${data.tip}`; showPrice(); } }); }); function updatePrice() { data.items = 0; document.querySelectorAll("input[type=checkbox]").forEach((checkBox) => { if (checkBox.checked) { data.items += +checkBox.value; showPrice(); } }); } function showPrice() { //Calculating Totals let orderTotal = data.items + data.tip; document.getElementById("price").textContent = `Food Total: $${( data.items / 100 ).toFixed(2)}`; document.getElementById("total").textContent = `Your order total is: $${( orderTotal / 100 ).toFixed(2)}`; }
about 4 years ago · Juan Pablo Isaza Denunciar

0

  • HTML: se cambió en lugar del botón de opción de tipo de entrada usado.
  • Javascript: se utilizó el mismo método que la casilla de verificación para la lógica del botón de opción.

 function updatePrice() { //Adding Food let items = 0; document.querySelectorAll("input[type=checkbox]").forEach((checkBox) => { if (checkBox.checked) { items += +checkBox.value; } }); //Adding Tip document.querySelectorAll("input[type=radio]").forEach((radioBox) => { if (radioBox.checked) { items += +radioBox.value; } }); //Calculating Totals let orderTotal = items; document.getElementById("price").textContent = `Food Total: $${( items / 100 ).toFixed(2)}`; document.getElementById("total").textContent = `Your order total is: $${( orderTotal / 100 ).toFixed(2)}`; }
 <div class="menu-items"> <h2>Order Details</h2> <div> <input type="checkbox" name="item1" value="1000" onChange="updatePrice()"> <label for="item1">12 piece wings $10</label> </div> <div> <input type="checkbox" name="item2" value="700" onChange="updatePrice()"> <label for="item2">6 piece wings $7</label> </div> <div> <input type="checkbox" name="item3" value="300" onChange="updatePrice()"> <label for="item3">Large fries $3</label> </div> </div> <div class="payment"> <h2>Payment Summary</h2> <p id="price">Food Total: $0.00</p> <p id="fee">Delivery Fee $0.00</p> <p id="tip">Tip: $0.00</p> <input type="radio" name="tip" value="300" onChange="updatePrice()"> 3 <input type="radio" name="tip" value="500" onChange="updatePrice()"> 5 <input type="radio" name="tip" value="1000" onChange="updatePrice()"> 10 <p id="total">Your order total is: $0.00</p> </div>

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda