Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

160
Visualizações
¿Por qué mi primer clic en el botón + no aumenta el valor de la entrada?

Hice una secuencia de comandos rápida que actualizará el número en el campo <input> entre los 2 botones, pero cuando hago clic en el botón + inicialmente no funciona, después de presionar por primera vez, comienza a funcionar como se esperaba desde el segundo clic y para el resto de los clics. Hacer clic en el botón - primero funciona como se esperaba.

 // click + button
$(".inc").click(function(){
 service = $(this).closest(".service-option-card");
 let quantity = getCurrentQuantity(service);
 let newQuantity = quantity+1;

 setNewQuantity(newQuantity, service);
 updatePrice(newQuantity, service);
});

// click - button
$(".dec").click(function(){
 service = $(this).closest(".service-option-card");
 let quantity = getCurrentQuantity(service);
 let newQuantity = quantity-1;

 if(newQuantity <= 0) {
 let newQuantity = 0
 setNewQuantity(newQuantity, service);
 } else {
 setNewQuantity(newQuantity, service);
 }

 updatePrice(newQuantity, $(this).closest(".service-option-card"));
});

// Get current number
function getCurrentQuantity(service) {
 let quantity_str = service.find(".quantity").val();
 quantity_num = Number(quantity_str);
 return quantity_num;
}

// Set new Number
function setNewQuantity(quantity, service) {
 service.find(".quantity").val(quantity);
}

// Update Price
function updatePrice(quantity, service) {
 var price = parseInt(service.find(".price").val().replace(/,/g, ""));
 var total = quantity * price;

 if(total < 0) {
 total = 0;
 }
}
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


<div class="service-option-card" data-monthly="10"> 
 <div class="quantity">
 <button class="btn btn-quantity dec">-</button>
 <input class="quantity-input quantity" value="1">
 <button class="btn btn-quantity inc">+</button>
 </div>
</div>

almost 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

La razón principal aquí es que está utilizando la clase .quantity para obtener el valor de la input que también se establece en el div principal de la input , por lo que cuando let quantity_str = service.find(".quantity").val() se ejecuta, precisamente el método find que se invoca en service , el div con class .service-option-card que es el padre tanto de div.quantity como de input.quantity , entonces el método find coincidirá con div y la input , por lo tanto, no obtendrá el valor de la input como se esperaba.

Hay muchas correcciones, una solución rápida es prefijar el selector .quanity con input (se convierte en input.quantity ) para apuntar solo a la input y así obtener el resultado esperado.

Aquí hay una demostración con la corrección aplicada:

 // click + button
$(".inc").click(function(){
 service = $(this).closest(".service-option-card");
 let quantity = getCurrentQuantity(service);
 let newQuantity = quantity+1;

 setNewQuantity(newQuantity, service);
 updatePrice(newQuantity, service);
});

// click - button
$(".dec").click(function(){
 service = $(this).closest(".service-option-card");
 let quantity = getCurrentQuantity(service);
 let newQuantity = quantity-1;

 if(newQuantity <= 0) {
 let newQuantity = 0
 setNewQuantity(newQuantity, service);
 } else {
 setNewQuantity(newQuantity, service);
 }

 updatePrice(newQuantity, $(this).closest(".service-option-card"));
});

// Get current number
function getCurrentQuantity(service) {
 let quantity_str = service.find("input.quantity").val();
 quantity_num = Number(quantity_str);
 return quantity_num;
}

// Set new Number
function setNewQuantity(quantity, service) {
 service.find("input.quantity").val(quantity);
}

// Update Price
function updatePrice(quantity, service) {
 var price = parseInt(service.find(".price").val().replace(/,/g, ""));
 var total = quantity * price;

 if(total < 0) {
 total = 0;
 }
}
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


<div class="service-option-card" data-monthly="10"> 
 <div class="quantity">
 <button class="btn btn-quantity dec">-</button>
 <input class="quantity-input quantity" value="1">
 <button class="btn btn-quantity inc">+</button>
 </div>
</div>

La línea var price = parseInt(service.find(".price").val().replace(/,/g, "")) arroja un error porque su HTML no tiene un elemento que tenga la clase de price que lleva para intentar ejecutar el método de replace en undefined .

De todos modos, solo quería advertirle sobre eso, la solución está fuera del alcance de mi respuesta (aunque con gusto le proporcionaré más ayuda si es necesario).

almost 4 years ago · Santiago Trujillo Relatório

0

Se está rompiendo porque su elemento de entrada tiene una clase .quantity que también es una clase en un elemento div. El método de búsqueda en las funciones setNewQuantity() y getCurrentQuantity() seleccionan el div que evalúa su valor en 0 porque el valor no existe para la etiqueta div. En el primer clic, el cero se evalúa en 1, lo que también es el valor en su etiqueta de entrada, por lo tanto, no parece tener un efecto visual. cambie sus funciones a

 // Get current number
function getCurrentQuantity(service) {
 console.log({service})
 let quantity_str = service.find("input.quantity").val();
 console.log({quantity_str})
 quantity_num = Number(quantity_str);
 return quantity_num;
}

// Set new Number
function setNewQuantity(quantity, service) {
 service.find("input.quantity").val(quantity);
}
almost 4 years ago · Santiago Trujillo Relatório

0

Creo que es porque estás usando Number() en tu función getCurrentQuantity() .

almost 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda