Durante el proceso de pago en nuestro sitio magento, los clientes pueden agregar un código de descuento.
Este es el pasaje de código relevante:
<div class="payment-option _collapsible discount-code _active"> <form class="form form-discount" id="discount-form"> <div class="payment-option-inner"> <div class="field"> <label class="label" for="discount-code"> <span data-bind="i18n: 'Enter discount code'">Geben Sie den Rabatt-Code ein</span> </label> <div class="control"> <input class="input-text" type="text" id="discount-code" name="discount_code" placeholder="Geben Sie den Rabatt-Code ein"> </div> </div> </div> <div class="actions-toolbar"> <div class="primary"> <button class="action action-apply" type="submit" data-bind="'value': $t('Apply Discount'), click: apply" value="Rabatt anwenden"> <span><span>Rabatt anwenden</span></span> </button> </div> </div> </form> </div>Para facilitar las cosas a nuestros clientes, quiero escribir los códigos de descuento en el almacenamiento local y completar automáticamente el campo de descuento para ellos. Todo esto funciona bien. Sin embargo, al enviar el formulario o hacer clic en el botón (ya sea a través de Javascript o manualmente en el navegador), el formulario devuelve un error de que el código no es válido.
Mirando la consola, el valor del campo de entrada no se envía y se pasa una cadena vacía a Magento para su verificación. Lo que obviamente devuelve el mensaje de error.
¿Alguien puede darme alguna orientación sobre lo que me estoy perdiendo al configurar automáticamente el código de descuento? Este es el pasaje relevante en el guión:
document.getElementById('discount-code').value = discountCode; var discountSection = document.getElementsByClassName("discount-code")[0]; var discountButton = discountSection.getElementsByClassName("action-apply"); discountButton[0].click()el uso de enviar () volverá a cargar la página y perderá el código de descuento, por lo que hacer clic en el botón parece ser el camino a seguir. ¿Me estoy perdiendo algún proceso en el que necesito hacer que el formulario "se dé cuenta" de que se ingresó una entrada?
Parece que te falta un objeto con la clase de discount-code . Veo que lo usa como nombre e identificación, pero sin clase, por lo que getElementsByClassName vuelve vacío ya que no hay elementos con esa clase.
Creo que querías usar la clase actions-toolbar .